2016-04-26 156 views
4

在閱讀mongodump文檔時,我遇到了這個信息。 「 」mongodump只在其備份數據中捕獲數據庫中的文檔,並且不包含索引數據.mongorestore或mongod必須在恢復數據後重建索引。「爲什麼mongodump不備份索引?

考慮到索引也是數據庫難題的關鍵部分,並且它們需要重新構建表單,爲什麼沒有mongodump可以選擇使用索引進行備份?

我知道沒有備份索引作爲默認選項的兩個優點: 1.我們節省了索引備份和恢復所需的時間。 2.我們節省了存儲備份所需的空間。

但爲什麼不把它作爲一個選項呢?

回答

5

mongodump從MongoDB數據庫(以BSON格式)創建數據的二進制導出。指標的定義備份在<dbname>.metadata.json文件中,所以mongorestore可以重新創建原始數據&索引。

主要有兩個原因,實際的指標不能與mongodump備份:

  • 指標指向數據文件的位置。如果您僅導出數據文件中的文檔(而不是獲取數據文件的完整文件副本),則數據文件不存在。

  • 磁盤上索引的格式是特定於存儲引擎的,而mongodump旨在與存儲引擎無關。

如果你想要的數據&索引的完全備份,則需要backup by copying the underlying data files(通常通過使用文件系統或EBS快照)。對於較大的部署,這是一個更常見的選項,因爲mongodump要求將所有數據讀入mongod進程(如果數據庫大於內存,它將驅逐一些工作集)。