Mongodb

mongorestore 在前台進行索引

  • December 4, 2014

我需要恢復使用 mongodump 實用程序獲取的大量轉儲。由於集合很大並且 mongorestore 在後台重建索引,索引建構需要很長時間才能完成。我想要的是以某種方式使 mongorestore 在前台建構索引,以便索引建構將花費更少的時間來完成。

我知道我可以--noIndexRestore用來忽略索引,但是我將不得不一個一個地建構索引,這又是一個問題。我正在尋找使用 mongorestore 實用程序加速索引建構的最佳方法。

只有{background: true}最初創建的索引(因此在system.indexes集合中設置了該選項)在恢復後才會在後台建構。轉儲數據庫後,您將在文件中擁有數據,並在name.bson文件中擁有元數據(要建構的索引)name.metadata.json。與 BSON 文件不同,JSON 元數據只是文本,可以在恢復之前進行修改。

作為測試,我創建了一個集合,除了欄位和欄位上foo.bar的預設值之外,還有 2 個附加索引。這是我轉儲後轉儲文件在 foo 文件夾中的樣子:a``b``bar.metadata.json

{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "foo.bar" }, { "v" : 1, "key" : { "a" : 1 }, "name" : "a_1", "ns" : "foo.bar" }, { "v" : 1, "key" : { "b" : 1 }, "name" : "b_1", "ns" : "foo.bar", "background" : true } ] }

您可以使用您最喜歡的編輯器“修復”此問題,並, "background" : true使用查找和替換或類似方法刪除。或者您可以使用sed一個襯裡,例如:

sed 's/, "background" : true//g' bar.metadata.json 

正如預期的那樣,這給了我們:

{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "foo.bar" }, { "v" : 1, "key" : { "a" : 1 }, "name" : "a_1", "ns" : "foo.bar" }, { "v" : 1, "key" : { "b" : 1 }, "name" : "b_1", "ns" : "foo.bar" } ] }

我用上面的 bar.metadata.json 文件測試了恢復,我的索引不再在後台創建,也不再被標記為這樣system.indexes

引用自:https://serverfault.com/questions/648760