Index
我應該在導入轉儲之前還是之後建立索引?
我正在使用 mongodb 來持久化一個非常大的(90G),它有近 40,000,000 個項目。我讀取並解析這個文件並將所有項目插入到 mongodb 中(我的程式語言是 perl,batch_insert,我將一項映射到一個 mongodb 文件)。
在插入之前,我已經預先創建了索引(大約 10 個索引鍵)。我發現插入速度不能滿足我的需要(每秒 200 到 400 個項目)。我知道太多的索引鍵肯定會減慢我的插入速度,尤其是當集合的大小變得很大時。所以我想知道在將所有數據轉儲到數據庫後是否可以索引它們。
誰能告訴我這種方式是否可用,是否可以節省我的時間?
是的,您可以在導入後對它們進行索引(然後
_id
集合中只有預設索引)。這也是推薦的,因為生成的索引將更緊湊和更有效(出於類似原因,如果您負擔得起,則首選前台與後台索引)。不過,這需要一些時間才能完成,尤其是要建構 10 個索引。要在導入後建構,只需在導入完成之前不要定義任何索引,然後使用ensureIndex()命令在之後創建所需的索引(通常需要注意的是,此類索引的創建將是資源密集型的)。了解更多資訊:
我對一個大集合有同樣的問題。經過兩天多的繁重導入數據過程後,我建議接下來做的是讓收集盡快啟動並執行:
- 創建沒有索引的空集合併僅導入數據。
- 選擇單個欄位索引並創建它們。
- 如果有,請創建所有多個欄位索引。(這對於我擁有超過 5 個欄位的索引來說特別慢,但單個或兩個欄位的速度非常快)。