Mongodb - 快速导出所有文档而不会影响其他查询?

时间:2014-12-21 13:23:37

标签: performance mongodb export

我需要Mongo集群执行2次操作:

  1. 获取/更新单个文档 - Mongo非常适合实时更改,速度非常快。
  2. 将所有文档导出到JSON文件(一个类别的文件,有cca 15个类别) - 这很慢,当我使用常规查询时。可能是我不知道,使用什么命令或选项......或者我需要将它整合到RAM中,这是很有用的。即使复制到新的mongo实例也要快得多(需要几个小时),然后查询并将数据写入磁盘(需要数天)。
  3. 我有大约1000万份文件。磁盘上的Mongo数据有250Gb。有cca 15类别,我需要单独的文件(目前所有文件都在1个集合中,不论其类别)。

    我应该使用哪个命令在几个小时内将所有数据导出到文件中? 我应该用多大的aws实例加速它,但不要为RAM付出太多。这会有帮助吗?操作2)不得导致操作的性能命中1) - 我无法阻止Mongo并使用mongoexport。

1 个答案:

答案 0 :(得分:0)

我不确定您使用的是哪种服务器,但这可能会提供有关导出/文件创建性能的一些进一步见解,而不是关闭mongo。有人假设您正在使用分片和复制的群集。

在我的情况下,我在Azure VM上运行Windows服务器的复制和分片群集。因此,我会在每个RS中的辅助设备上获取与数据磁盘关联的Azure blob的副本。您应该停止平衡器并锁定辅助节点上的数据库以执行此操作。这最多只需要几分钟就能复制250gb。然后我会将blob恢复到新VM上的磁盘。

然后,您可以从此VM中查询数据,而不会影响群集的性能。您可以另外为此导出过程添加索引,因为您现在位于单独的实例上。

我个人使用PowerShell在Azure中执行此操作。如果通过mongo shell的JavaScript失败,Golang可能是编写查询的更好选择,因为它具有并行功能。我的JS工作比python代码快,但它也取决于你所知道的。

这只是一种方式,但它确实解决了您发布的一些标准。