Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Mongo-快速导出所有文档而不影响其他查询?_Performance_Mongodb_Export - Fatal编程技术网

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

Performance Mongo-快速导出所有文档而不影响其他查询?,performance,mongodb,export,Performance,Mongodb,Export,我需要Mongo群集执行2个操作: 获取/更新单个文档-Mongo非常适合实时更改,速度非常快。 将所有文档导出到JSON文件中,一个文件对应一个类别,共有15个类别-当我使用常规查询时,这非常慢。可能是我不知道,使用什么命令或选项。。。或者我需要把它全部装进RAM,这是很昂贵的。即使复制到一个新的mongo实例也要比查询和将数据写入磁盘需要几天的时间快得多。 我有大约1000万份文件。磁盘上的Mongo数据有250Gb。有15个类别,我需要单独的文件,目前所有文件都在一个集合中,无论类别如何

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

获取/更新单个文档-Mongo非常适合实时更改,速度非常快。 将所有文档导出到JSON文件中,一个文件对应一个类别,共有15个类别-当我使用常规查询时,这非常慢。可能是我不知道,使用什么命令或选项。。。或者我需要把它全部装进RAM,这是很昂贵的。即使复制到一个新的mongo实例也要比查询和将数据写入磁盘需要几天的时间快得多。 我有大约1000万份文件。磁盘上的Mongo数据有250Gb。有15个类别,我需要单独的文件,目前所有文件都在一个集合中,无论类别如何

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

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

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

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

就我个人而言,我在Azure中使用PowerShell来实现这一点。如果通过mongo shell使用JavaScript失败,Golang可能是编写查询的更好选择,因为它具有并行功能。我已经让JS比python代码工作得更快,但这也取决于您所知道的

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