AWS Lambda非同期コールや、AWS STEP FUNCTIONでは、payloadサイズが256KB程度に制限されています。具体的には、ソルバーに投げるpayload sizeがこのサイズを超えているとLambdaに届くまえにはじかれてしまいます。SC3GUIでは、1MBのproblem.jsonも普通にありえるので、なるべくこのサイズが、256KB以下になるようにすることが目的です。(サイズを超えたらS3を使います。DynamodbでもItemSizeが制限されているので不適です。)
SC3 GUIでは、Jsonのシリアライザにnewtonsoftを使っています。このオプションを使うことで、ある程度ダイエットが可能です。
<方法1 インテンドなしにする>#if REDUCE_JSON Newtonsoft.Json.JsonSerializerSettings settings = new Newtonsoft.Json.JsonSerializerSettings { Converters = { new CustomDateTimeConverter() },Formatting = Newtonsoft.Json.Formatting.None }; #else Newtonsoft.Json.JsonSerializerSettings settings = new Newtonsoft.Json.JsonSerializerSettings { Converters = { new CustomDateTimeConverter() },Formatting = Newtonsoft.Json.Formatting.Indented };//, Forma #endif
こうすると、読みやすいJSONが
{ "SO": { "name": "Shift Objects", "members": [ { "use": true, "name": "ShiftDef", "def_name": "日勤", "auto_schedule": true, "color": "LightGray", "label": "・", "another_labels": [ "", "" ],
読みにくくなります。これが一番効果がありました。
{"SO":{"name":"Shift Objects","members":[{"use":true,"name":"ShiftDef","def_name":"日勤","auto_schedule":true,"color":"LightGray","label":"日","another_labels":["",""],"another_colors":
<方法2 default valueを使う。defaultの値を定義しておいて、それと同じだったらJSON化されません。> 方法1と2を用いることで、サイズが1/4から1/5程度になりました。
#if REDUCE_JSON [ DefaultValue("")]//OCT042020 [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] #endif public string shift; //OCT042020 #if REDUCE_JSON [DefaultValue(0)] [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public int level;
#endif
0 件のコメント:
コメントを投稿