1ヶ月近く前にユーザーの方からエラーコード400が返る不具合についてご連絡をいただいていたのですが、調査する環境がなかなか整わず、一部のユーザーの方々には長期間にわたりご迷惑をおかけしてしまい、誠に申し訳ありませんでした。

ようやく原因がわかり、サーバー側で対処しましたので、今後エラーは発生しないと思いますが、万が一発生しましたらコメントなどで連絡いただけると助かります。

原因は、サーバーに送られるデータのサイズが大きくなりすぎたためで、長期間オフラインでプレイした後にオンラインになると発生していたのだと思います。

サーバーにはマイクロソフトのAzureを使っていて、データベースはSQLではなくAzure Storage Tableを使っているんですが、そのテーブルに挿入できるデータサイズの制限にひっかかっていました。

こんなことちゃんと事前に調べるとかテストするとかしておかなきゃダメですよね。大変申し訳ありませんでした。

以下、言い訳です。

テーブルに挿入する1行あたりのデータサイズには1MBの制限があるのは承知していたので、アプリからデータを送るときは最大でも128KBくらいに収まるように分割していたんですが、はずかしながら列ごとのデータに64KBの制限があることを知らなかったのです。ちゃんとドキュメント読んだつもりだったんですけどね。

それでググってみたら、StackOverflowに同じような人が。

Though official site of azure table talks about limitation of other entities, I never read anything on column data size limitation. While few non official blog talks about max size of 64KB. Is this the case or there is no limitation on the size of a column only limited by row size of 1MB.

そうですよね、公式ドキュメントに書いてないですよね、と一瞬思ったのも束の間、その回答には

We can find the limitation of property is 64KB from following official document.

Understanding the Table Service Data Model

え、そのドキュメントちゃんと読んだつもりだったんですけど・・・。

このドキュメントには行全体で1MBの制限があるというのがハッキリ書いてあるんですが、よく読むとテーブルに使用できるデータタイプの説明のところに、

OData Data Type Common Language Runtime type Details
Edm.Binary byte[] An array of bytes up to 64 KB in size.
: : :

書いてありました。

でも普通の人はこんなの使えるデータタイプの一覧が示してあるだけだと思うじゃないですか。まさかこんなところに超重要なことが書いてあるなんて。完全に見逃していました。

ちゃんとProperty Limitationsのところに書いてくださいよ! マイクロソフトさん!

と責任転嫁して終わりにしたいと思います。

いやもちろん、最終的な責任は我々にあるんですが。反省してます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Anti Spam Code *