2

バッチプットを行うと、時々このエラーが発生します。

RequestTooLargeError: API 呼び出し datastore_v3.Put() への要求が大きすぎました。

これをトリガーするdb.put呼び出しは、1000 以上のエンティティのリストで呼び出しを行います。各エンティティには、db.TextProperty約 20,000 文字で埋められる 1 つのフィールドがあります。db.put各エンティティには親エンティティもありますが、共通の親を共有するために渡されたリスト内のエンティティはありません。親エンティティはそれぞれ約 10 個の整数を格納し、それほど大きくはありません。

私の最初の本能は、渡されるエンティティの数を分割することでしたdb.putが、

この原因に関するアイデアはありますか?

編集:エンティティの分割は機能します。たとえば、私はこれを行うことができます:

for entity in entities: entity.put()

しかし、この質問に対する答えは、配置されるエンティティの数は重要ではないことを示唆しています。だからまだ混乱しています。

4

3 に答える 3

4

エンティティのサイズを見つけるための簡単なテストは、memcache への書き込みを試みることです。memcache の 1 メガバイトの制限を超えた場合、書き込みは失敗し、例外をキャッチできます。ニックの提案に従って問題を切り分ける場合に役立つ場合があります。

于 2012-05-02T16:17:24.117 に答える
1

私は今まで StringProperty を使用していましたが、そのプロパティに格納されたデータが最終的に大きくなりすぎたとき (1 MB を超えただけ)、同じ問題に遭遇しました。JsonProperty where で今のところ修正できましたcompressed=True。オプションかもしれません。

于 2015-07-13T10:18:31.217 に答える
0

このバッチ更新はトランザクション内ですか? その場合、トランザクションサイズには 10 MB の制限があることに注意してください。

于 2012-08-06T19:07:25.257 に答える