1

特定のエンティティタイプのすべての行のフィールドまたは値を更新するという非常に一般的な要件があり、通常は10分のキュー制限を超えています。

それで、すべての行の更新を完了することができるタスクキューを使用してcronジョブを実行するための最良の方法は何ですか?

私が試したアプローチの1つは、cronジョブでクエリを実行し、各リストに100個のIDが含まれているなど、同じサイズのIDの複数のリストを作成することでした。次に、idリストを渡すことにより、リストごとに1つのタスクを生成します。次に、タスクコードで、を使用してエンティティ行を取得します

pm.getObjectIdとそれを処理します。

私はまだこのアプローチを少し手動でインテリジェントではないと感じています。それを処理するためのより良い方法はありますか?

4

2 に答える 2

1

これを使用して、タスクキューの10分の制限内の数百万のレコードを更新します。

  1. 各反復でカーソルを使用してクエリを実行するループを作成します(使用しないでくださいoffset())。各反復で次のカーソルを使用します。このようにして、対象となるエンティティの全範囲を効率的に歩くことができます。limit(1000)毎回1000エンティティのバッチを取得するために使用します。また、ネットワークラウンドトリップを最小限に抑えるために、プリフェッチサイズを1000に設定します。

  2. バッチごとに、プロパティを更新してから、asyncputを実行します。

于 2013-01-05T08:49:01.127 に答える