2012-10-09 39 views
0

我在做這個項目,我不得不對MongoDB的數據庫中執行大量插入MongoDB的上collection.insert和數據大小的困境

我明白,MongoDB是一個文檔數據庫,並有限制在每個大小如圖here

現在對於大量插入代碼文件看起來像這樣

RockBand.collection.insert(mass_data) 

mass_data是的陣列散列這樣

[ 
    { 
    name: "LedZepplin", 
    member : 4, 
    studio_album : 10, 
    ... 
    ... 
    ... 
    }, 
    { 
    name: "Linkin Park", 
    member: 5, 
    studio_album: 7, 
    ... 
    ... 
    ... 
    }, 
    { 
    ... 
    ... 
    }, 
    ... 
    ... 
] 

長度陣列的是500K - 100K

一個我知道爲確保沒有上述散列存在於陣列,其基本上是在MongoDB中的文件是大小爲16MB

所以每當我表演這個

RockBand.collection.insert(mass_data) 

爲什麼它保持給我16MB的極限誤差狀態上面我敢肯定,沒有任何上述文件persent的陣列中(即哈希)重不爲16MB IND的個人。

那麼爲什麼數據大小的誤差超過爲一個文件

難道是考慮到整個數組作爲單一的文件時,它應該被考慮

陣列的每個哈希作爲一個單獨的文件

任何人都可以提出

順便說一下我使用的有關MongoDB Ruby驅動程序的頂部Mongoid驅動程序連接到MongoDB的

回答

0

當你像這樣插入一個數組時,你將整個數組作爲單個文檔插入。您必須像插入單個命令一樣將每個對象插入到數組中。

+0

所以你的意思插入一個數組會告訴mongo將整個數組視爲單個文檔,那麼如何實現大容量插入然後 – Ratatouille

+0

剛剛在http://stackoverflow.com/questions/3772378/batch上找到了一個鏈接-insert-update-using-mongoid在這裏,沒有什麼不同的是提及我爲大規模插入做什麼 – Ratatouille

+0

我不知道足夠紅寶石我也不能全面瞭解你的源代碼,但它可能是你實際存儲一個字符串而不是紅寶石哈希?你是否嘗試過批次,讓我們說5個條目,而不是整個批次。也許在mongoid中有一些問題,它仍然有16mb的批量限制。 – philnate