2013-12-19 26 views
0

我正在使用MongoDB。我有一张有7M记录和加权文本搜索索引的表格。MongoRestore创建索引阶段使用100%资源并锁定数据库

当我做一个MongoRestore时,恢复的创建索引阶段使用我数据库资源的100%。 MongoDB对任何事情都没有反应,直到完成。我的数据库被锁定到任何传入连接。事实上,它停止报告任何进展的索引创建到我的输出,并且我的mongodb客户端开始获取请求超时错误。我仍然可以拖拽到服务器端的mongodb日志来检查索引创建的进度。

我需要数据库在这个过程正在发生时作出响应。它适用于我所有的其他表格,这些表格稍小一些。下一个最大的表格,效果很好,仍然使用加权文本搜索索引,大约是3M的记录。

我该怎么做?谢谢。

+0

是否有必要将大集合还原到实时运行的数据库中?也有可能没有足够的资源来处理你想要做的事情。您可以随时在没有构建索引的情况下进行mongorestore,然后单独在后台启动索引构建(使用后台选项)。 –

回答

0

我还没有试过这个,但似乎用{ background: true }创建的索引被mongodump这个属性倾倒。在索引创建阶段,该属性将被传递给mongorestore

也许你可以用后台选项重新创建一些战略索引,然后转储数据库。然后,恢复过程应该减少服务器的压力,并且完成得更快。在MondoDB重建后台索引时应该允许读写操作。

请注意,背景索引构建需要更长的时间才能完成,并且会产生更大的索引。此外,由于背景索引创建操作将被放在它们上面,所以这不适用于辅助副本集成员。

http://docs.mongodb.org/manual/tutorial/build-indexes-in-the-background/ http://docs.mongodb.org/manual/tutorial/build-indexes-on-replica-sets/

HTH。