2012-02-19 9 views
4

既存のレコードを更新するバッチ・プットのハードリミットまたはパフォーマンス低下の制限はありますか?私は数千の既存のレコードが処理されるタスクキュープロセスを持っています。プロセスループが終了すると、インデックス付けされたBooleanPropertyがすべてのレコードに対してFalseからTrueに変更されます。一度に5,000件のレコードを処理し、バッチを入れ子に入れて10回の更新が一度に500回実行されるようにすると、影響はありますか? TIA -stevepバッチput()の制限

答えて

6

バッチAPIは、必要に応じて大量のリクエストを分割するので、自分で行う必要はありません。ライブラリは、サービスコールの合計サイズや、単一コールに入れることができるエンティティの数などの制限を管理し、適切な数のコールをサービスに送信します。 (ライブラリコードによると、これは1メガバイトと500エンティティの1コールあたりのように見えますが、あなたのアプリはそれを知る必要はなく、これらは変更される可能性があります。)put()コールを分割する利点はありません。あなたが試してみると、必要以上に多くのサービスコールを偶発的に送信するかもしれません

+5

エンティティの複雑さにもよりますが(主にプロパティの数、リストのプロパティを何回かカウントすることによって決まります)、5000個のエンティティをプロトコルバッファオブジェクトに変換します(要求にシリアル化する前に必要です)。 )多くのRAMを使用する可能性があります。ダン・サンダーソン(Dan Sanderson)が述べたバッチ分割は、残念ながらメモリ内のオブジェクトの数を同時に最小限に抑えるわけではありません。したがって、メモリエラーが発生した場合は、小さなバッチを作成することが実際に役立つかもしれません。 –