2013-06-08 15 views
6

まあ、私はmongoに新しく、今日の朝は(悪い)考えがあった。私はシェルからの索引で遊んでいて、多くの文書(1億)で大規模なコレクションを作成することに決めました。だから私は、次のコマンドを実行:1億件の文書が多すぎますか?

for (i = 1; i <= 100; i++) { 
    for (j = 100; j > 0; j--) { 
     for (k = 1; k <= 100; k++) { 
      for (l = 100; l > 0; l--) { 
       db.testIndexes.insert({a:i, b:j, c:k, d:l}) 
      } 
     } 
    } 
} 

しかし、物事は私が期待通りに行かなかった:

  1. それは、45分には、要求を完了しました。
  2. 私のハードディスクに16 GBのデータを作成しました。
  3. 私のRAMの80%(合計8GB)が使用されていて、PCを再起動するまで解放されません。

下の写真からわかるように、コレクション内のドキュメント数が増えているので、ドキュメントの挿入時間も増えています。

enter image description here

これは正常な動作です:私は、データファイルの最終更新時刻によってことを示唆していますか?私は10000000 簡単な文書が多すぎるとは思わない。

P.S.私は今、ensureIndexコマンドを実行することを本当に恐れています。

編集:

私は、次のコマンドを実行:だから

> db.testIndexes.stats() 
{ 
     "ns" : "test.testIndexes", 
     "count" : 100000000, 
     "size" : 7200000056, 
     "avgObjSize" : 72.00000056, 
     "storageSize" : 10830266336, 
     "numExtents" : 28, 
     "nindexes" : 1, 
     "lastExtentSize" : 2146426864, 
     "paddingFactor" : 1, 
     "systemFlags" : 1, 
     "userFlags" : 0, 
     "totalIndexSize" : 3248014112, 
     "indexSizes" : { 
       "_id_" : 3248014112 
     }, 
     "ok" : 1 
} 

を、_idのデフォルトのインデックスは、3ギガバイトの大きさ以上のものを持っています。

答えて

2

リクエストを完了するまでに45分かかりました。

驚くことではありません。

私のハードディスクに16 GBのデータを作成しました。

@Abhishekはすべてがうまくいっているように、MongoDBは圧縮なしで相当量の領域を現在使用しています(これはうまくいけばうまくいきます)。

データサイズは約7と思われます。2GBの平均オブジェクトサイズは72バイトですが、これは完全に動作しているようです(72バイトは7.2GBに収まるので).3GBの_idインデックスのオーバーヘッドで、10GBの記憶容量がかなりうまくいくようです。

私はそれが必要であると言う統計よりも6GB以上を使用していると懸念していますが、それはもっと調べる必要があるかもしれません。私はそれがMongoDBがどのようにデータファイルに書き込んだのかと推測しています。それはあなたが非火を使わず、書き込みの懸念を忘れるからです(w>0)。うーん。

これは私のRAMの80%(合計8GB)を使用していて、PCを再起動するまで解放されません。

MongoDBは、OSが許可するほどのRAMを試してみます。 OSが80%から80%を取るとすれば、それはかかります。これは実際には良い兆候です。MongoDBがあなたの作業セットを効率的に保存するための正しい設定値を持っていることを示しています。

ensureIndexmongodを実行すると、RAMが解放されることはありません。それは単にそれのためのフックを持っていません、代わりにOSは割り当てられたブロックを縮小して、より多くの(またはむしろ)べき余地を確保します。

1

これは予想される動作です。mongo dbファイルは16MB(test.0)のファイルサイズで始まり、2GBまで成長してから2GBは一定です。

100万(16 GB)のドキュメントは何もありません。 ensureIndexを実行すると、時間がかかりません。

PCを再起動する必要はありません。他のプロセスがRAMを必要とする瞬間、mongodはRAMを解放します。

FYI:test.12は完全に空です。

私はあなたが1億のドキュメントだけの16GBのサイズを心配していないと思いますか?

関連する問題