首页 > 解决方案 > Mongo读取大量数据

问题描述

我有一个包含 115M 文档的 mongo 集合,大小约为 200 GB。

_id 类似于"bbsr/13/pressure/1573689600000"。最后一个元素是 unix 时间戳。现在我需要获取 _id :/bbsr/13/pressure/的所有文件。或_id startsWith bbsr/13/pressure。这里,“bbsr/13/pressure”是标识符

我尝试使用 _id 正则表达式进行分页(跳过和限制),提供所有文档(数量为 330000)大约需要 1 小时。

我尝试了基于范围的查询{_id={$gte=bbsr/13/pressure/1573689600000, $lt=bbsr/13/pressure/1574121600000}}。即使这样也需要一个多小时。

对于一个标识符来提供两种方法中的所有文档,需要一个多小时。

我想在最多 10 分钟内获取给定标识符的所有文档。

如何高效处理?

我正在使用 java 来获取值。

标签: mongodbindexingmongodb-querydatabase-performance

解决方案


我认为您最大的问题是您试图按 custom 中的内容进行搜索_id。您应该做的是将时间戳存储在单独的属性上并对其进行索引,然后仅按该时间戳属性进行过滤。有了这个,搜索会快得多。

此外,是否有特定原因需要自定义_id而不是让它自动生成?我会将您_id字段中的每个部分设为单独的属性。该分段的正则表达式解析_id绝对是您的罪魁祸首。搜索单个属性的速度更快。


推荐阅读