0

それぞれ平均550 バイトの2,000 万のドキュメントPHP ドライバーが 1 台のマシンにあるとします。

で最初に挿入します(mongoimportではありません)journal on, WriteConcern to default (1)。約12時間かかりました。ふと疑問に思ったので、2回目のインポートを試みました。

次に、batchInsert()を使用--nojournal and WriteConcern=0してパフォーマンスを記録しました。合計で12時間もかかりました?! 40000 records興味深いことに、 1 分ごとに挿入され始めたものは、最終的に2500 records100 records1 分ごとになりました。

私の質問は次のとおりです。

  1. ジャーナルをオフにして w=0 にし、batchInsert() を使用すると、挿入の合計が大幅に減少するはずです。
  2. 1 分あたりの挿入数の大幅な低下はどのように説明されていますか?

- アップデート -

マシンは Core Duo 3GHz で、8GB の RAM を搭載しています。RAM 使用率は、プロセス全体で %50 で安定しています。ただし、CPU 使用率は高くなります。PHP ではini_set('memory_limit', -1)、メモリ使用量を制限する必要はありません。

4

2 に答える 2

0

たくさん髪を引っ張った後、バックログ効果を実感しました。興味深いことに、ドキュメントを 5000 行にまとめたところ、バッチ挿入は魔法のように機能し、わずか4 分足らずでインポートされました。

このツールは私にアイデアを与えました: https://github.com/jsteemann/BulkInsertBenchmark

于 2013-06-03T05:58:07.673 に答える
0

一度だけ移行する場合は、これらの挿入の前にすべてのインデックスを削除することをお勧めします。deleteIndex(..)メソッドを使用します。

すべての挿入が終了したら、使用isureIndex(..)してインデックスを元に戻します。

PS。あなたが提供した数値から、それは大量のデータではありません.MongoDBサーバーの設定が間違っている可能性があります. MongoDB サーバーの構成とメモリ サイズを提供してください。他に改善すべき点が見つかるかもしれません。

あなたの(2)の質問に答えると、おそらくあなたのサーバーはいくつかの挿入後のメモリ不足です。

于 2013-05-29T00:11:39.577 に答える