Index

我應該在導入轉儲之前還是之後建立索引?

  • July 29, 2016

我正在使用 mongodb 來持久化一個非常大的(90G),它有近 40,000,000 個項目。我讀取並解析這個文件並將所有項目插入到 mongodb 中(我的程式語言是 perl,batch_insert,我將一項映射到一個 mongodb 文件)。

在插入之前,我已經預先創建了索引(大約 10 個索引鍵)。我發現插入速度不能滿足我的需要(每秒 200 到 400 個項目)。我知道太多的索引鍵肯定會減慢我的插入速度,尤其是當集合的大小變得很大時。所以我想知道在將所有數據轉儲到數據庫後是否可以索引它們。

誰能告訴我這種方式是否可用,是否可以節省我的時間?

是的,您可以在導入後對它們進行索引(然後_id集合中只有預設索引)。這也是推薦的,因為生成的索引將更緊湊和更有效(出於類似原因,如果您負擔得起,則首選前台與後台索引)。不過,這需要一些時間才能完成,尤其是要建構 10 個索引。

要在導入後建構,只需在導入完成之前不要定義任何索引,然後使用ensureIndex()命令在之後創建所需的索引(通常需要注意的是,此類索引的創建將是資源密集型的)。了解更多資訊:

http://docs.mongodb.org/manual/core/index-creation/

我對一個大集合有同樣的問題。經過兩天多的繁重導入數據過程後,我建議接下來做的是讓收集盡快啟動並執行:

  1. 創建沒有索引的空集合併僅導入數據。
  2. 選擇單個欄位索引並創建它們。
  3. 如果有,請創建所有多個欄位索引。(這對於我擁有超過 5 個欄位的索引來說特別慢,但單個或兩個欄位的速度非常快)。

引用自:https://dba.stackexchange.com/questions/55277