2016-06-28 1 views
1

forEachと組み合わせて、一括/バッチ更新ドキュメント(最大10kドキュメント)にどのようにアプローチしますか? は(具体的な基準がによって更新しないように、ランダムな文書の選択のために使用される)forMachを使用したMongoDBの一括更新の効率

私は2つのオプションを探しています:

  1. 配列にforEachクロージャ内のすべての文書_idを収集し、その後 collection.update({_id : {$in : idsArray}}, ...)を使用して更新します
  2. どこか bulk.find({_id: doc.id}).updateOne({...}); bulk.execute();
の線に沿って、一括操作に forEach閉鎖に更新クエリを追加し、一度行って実行0

すぐにこれをベンチマークするつもりですが、I/O効率がよく、Mongoの「スマート」とは何かを知りたいと思います。

答えて

2

これで2つのオプションをベンチマークしました。

TL; DRオプション1は2倍の速さで、IDを収集して1回更新します。今後の参考のため

、のためのいくつかの詳細:

  • デシベルでのドキュメントの総数は500K程度です。
  • ドキュメントには、それぞれ約20〜25個のフィールドが含まれています。
  • 10-30k文書の更新を行いました。

結果(時間はマシン固有であるが、相対的な差は重要なものである):200-500ms:IDS配列と

  1. ワン更新。
  2. 一括更新:600-1000ms。

逆に振り返ってみると、おそらくいくつかの非表示の最適化があったため、大量のデータが高速になる可能性があります。しかし、その質問は論理が欠落していることを理解しています。

+0

知識の良い部分。ありがとう。 –

関連する問題