4

最近 MongoDB を試した後、大量のデータをコレクションにインポート/挿入するいくつかの異なる方法を試しました。これまでのところ、私が見つけた最も効率的な方法は mongoimport です。完全に機能しますが、まだオーバーヘッドがあります。インポートが完了した後でも、マシンを再起動しない限りメモリが使用可能になりません。

例:

mongoimport -d flightdata -c trajectory_data --type csv --file trjdata.csv --headerline

私のヘッダーラインとデータは次のようになります:

'FID','ACID','FLIGHT_INDEX','ORIG_INDEX','ORIG_TIME','CUR_LAT', ...
'20..','J5','79977,'79977','20110116:15:53:11','1967', ...

530 万行 x 20 列、約 900MB の場合、次のようになります。

オーバーヘッド

これは長期的にはうまくいきません。常に再起動できるとは限らないか、最終的にメモリ不足になります。MongoDB にインポートするより効果的な方法は何ですか? 定期的な RAM フラッシュについて読みましたが、上記の例のようなものをどのように実装できますか?

更新: 私のケースでは、fsync、syncdelay、またはジャーナリングを調整してもあまりメリットがないと思います。高RAMサーバーで実行していたとしても、いつそれが良いアイデアであり、ベストプラクティスになるのか、私はただ興味があります.

4

1 に答える 1

2

mongoimportではなく、mongodb自体がメモリを使用していると思います。Mongodb は設計上、すべてのデータをメモリに保持しようとし、十分なスペースがない場合は OS に依存してメモリ マップ ファイルをスワップします。そこで、次の 2 つのアドバイスをします。

  1. OS が「空き」メモリの量について何を言っているかについてあまり心配する必要はありません。最近の正常に動作する OS は、通常、利用可能な RAM のすべてのビットを何かに使用します。

  2. 1 を守れない場合は、ラップトップで mongodb を実行しないでください。

于 2013-04-06T05:06:02.227 に答える