mongodb - 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 来获取值。
解决方案
我认为您最大的问题是您试图按 custom 中的内容进行搜索_id
。您应该做的是将时间戳存储在单独的属性上并对其进行索引,然后仅按该时间戳属性进行过滤。有了这个,搜索会快得多。
此外,是否有特定原因需要自定义_id
而不是让它自动生成?我会将您_id
字段中的每个部分设为单独的属性。该分段的正则表达式解析_id
绝对是您的罪魁祸首。搜索单个属性的速度更快。
推荐阅读
- java - 驱动程序返回空值:appium
- php - 我无法发送控制器错误以在 laravel 中查看
- python - 进程池中的共享内存
- python - Pandas to_excel 将数据框写入 Microsoft Excel 二进制工作簿 (.xlsb)
- javascript - 我是否需要使用 firebase 函数 api 将 throw 放入 try catch 块中才能被捕获?
- linux - 我想用该文件中的另一个路径替换 yml 文件中的路径
- azure - Azure PHP Web 应用广告集成请求中指定的回复 URL 不匹配
- javascript - 创建和验证分层定价表
- javascript - 使用 javascript 的活动类
- r - 在 R 中使用 group_by 调用 hist()