为什么mongodump不备份索引?

时间:2016-04-26 03:06:51

标签: mongodb

在阅读mongodump文档时,我发现了这些信息。 " mongodump仅在其备份数据中捕获数据库中的文档,不包括索引数据。然后mongorestore或mongod必须在恢复数据后重建索引。"

考虑到索引也是数据库难题的关键部分,并且需要重建它们,为什么mongodump可以选择使用索引进行备份?

我认为将备份索引作为默认选项有两个优点: 1.我们节省了备份和恢复索引所需的时间。 2.我们节省了存储备份所需的空间。

但为什么不把它作为一种选择?

1 个答案:

答案 0 :(得分:7)

mongodump从MongoDB数据库(BSON格式)创建数据的二进制导出。索引 definitions <dbname>.metadata.json个文件中备份,因此mongorestore可以重新创建原始数据&amp;索引。

有两个主要原因导致无法使用mongodump备份实际索引:

  • 索引指向数据文件中的位置。如果仅导出数据文件中的文档(而不是获取数据文件的完整文件副本),则数据文件不存在。

  • 磁盘上的索引格式是特定于存储引擎的,而mongodump旨在独立于存储引擎。

如果您想要完整的数据备份和索引,您需要backup by copying the underlying data files(通常使用文件系统或EBS快照)。对于大型部署,这是一个更常见的选项,因为mongodump需要将所有数据读入mongod进程(如果您的数据库大于内存,则会占用您的一些工作集)。