MongoDB 2.6系以降ではmongo shellの大量データ処理にはBulk()を使う
今日久しぶりにもんごもんごして、知ったことをメモ。
概要
に書かれている内容そのままです。
MongoDB2.6以降では、mongo shellで↓のように書いていたコードを
for (var i = 1; i <= 1000000; i++) { db.test.insert( { x : i } ); }
↓のように変更する必要があるそう。
var bulk = db.test.initializeUnorderedBulkOp(); for (var i = 1; i <= 1000000; i++) { bulk.insert( { x : i} ); } bulk.execute( { w: 1 } );
MongoDB2.6以降でのmongo shellの挙動の変更点
2.6未満では、明示的にgetLastError()
を呼ばないと、投げっぱなし(fire-and-forget)でした。
ところが、2.6以降では、デフォルトのWrite Concernが、acknowledgedになったそう。
この挙動の変更により、クラスタ環境でのwriteのスループットが落ちてしまうとのことです。
解決策
を使えと。
initializeOrderedBulkOp()
とinitializeUnorderedBulkOp()
というメソッドがあるようです。
initializeXXXBulkOp()
のメソッドを使って、bulkオブジェクトを取得して、ゴニョゴニョっとすると。
まとめ
実際に動かした訳ではありません😝
が、そのうち使うので、ちゃんと覚えておこう。