Mongodb
mongorestore 在前台進行索引
我需要恢復使用 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
。