2013-05-28 64 views
0

考慮,20M文件用一臺機器上的550bytesPHP驅動每個平均值。MongoDB的寫入性能

第一個插入(不是mongoimport)與journal on, WriteConcern to default (1)。大約12小時。然後它讓我想知道,所以我嘗試了第二次導入。

二,我用batchInsert()--nojournal and WriteConcern=0和我注意到了性能。總共它太花了12小時?!什麼是有趣的開始是每分鐘插入40000 records它結束爲每分鐘2500 records,我只能想象它將在每分鐘末端100 records

我的問題是:

  1. 我認爲通過熄滅後,再刊物,並使W = 0,並使用batchInsert()我總插入應該顯著滴!
  2. 如何解釋每分鐘插入的顯着下降?

--UPDATE--

機是酷睿雙核3GHz的,8GB的RAM。在整個過程中,RAM使用率保持穩定在%50。 CPU使用率卻很高。在PHP中,我有ini_set('memory_limit', -1)不限制內存使用情況。

+0

這是一個集合結構嗎? – Kostanos

回答

0

經過大量的頭髮拉動,我意識到積壓效應。當我將我的文檔佔用5000行時,足夠有趣,批量插入的工作方式像魔術一樣,只需在之下導入4分鐘

這個工具給我的想法:https://github.com/jsteemann/BulkInsertBenchmark

0

如果只有一次遷移,我建議您在插入這些內容之前刪除所有索引。使用deleteIndex(..)方法。

在所有插入完成後使用isureIndex(..)獲取索引。

PS。從你提供的數字來看,它並不是大量的數據,可能你錯誤​​地配置了MongoDB服務器。請提供您的MongoDB服務器配置和內存大小,也許我可以找到其他的東西來改善。

回答你的(2)問題,可能你的服務器是一些插入後的內存運氣。

+0

我沒有添加任何二級索引,只有_id正在由mongo創建。是否建議在每次插入後刪除索引? – Zoheir

+0

不,如果你確定沒有更多的索引,所以我看到的唯一問題是MongoDB配置。我已經向mongoDB服務器插入了超過4GB的數據,沒有任何問題。檢查mongoDB配置中的內存限制,以及服務器上有多少內存? – Kostanos

+0

並且請添加您用於插入數據的代碼。 – Kostanos