qq_25291319 2024-10-23 10:34 采纳率: 0%
浏览 18

mongoexport 导出一直处于0条状态

首次接触mongo,使用mongoexport 按条件导出数据的时候一直处于0条的状态,且持续时间非常久:

1.目的:导出获取前一天有更新的数据, 判断条件是updateTime 时间在前一天的范围
2.导出的code:
例如同步2024-10-21有更新的数据的条件为:query_str={"updateTime":{$gte:1729440000000,$lt:1729526400000}}
mongoexport --uri="mongodb://XXXXX" --query="${query_str}" -c collection_name -o output_file
3.现象:

img


经过好几个小时才会真正的导出数据,且导出数据的过程也非常慢

img


最终导出的数据量也不算特别大

img

4.该mongo导出的collection的数据量大约在2000w的量级

5.疑问:
为什么会有那么长时间的0呢?如何解决呢?

  • 写回答

1条回答 默认 最新

  • QyDDLz 2024-10-25 10:47
    关注

    初次使用mongoexport遇到这种情况可能是由于查询优化的问题或者数据量较大引起的。当处理大量数据和复杂的查询时,mongoexport会逐行扫描数据以匹配查询条件,这可能导致效率降低。以下是几个可能的原因以及解决办法:

    1. 查询性能问题:对于大数据集, $gte$lt 查询可能会导致全表扫描,尤其当时间区间跨度很大时。试着调整你的查询条件,比如增加索引,特别是对updateTime字段。可以在updateTime上创建一个日期范围索引来加速查询。
    db.collection.createIndex({ updateTime: { type: "2d", expireAfterSeconds: 86400 } })  # 创建一个每天过期的索引
    
    1. 数据分布:如果数据分布不均匀,mongoexport可能会偏向于读取某一部分数据,导致显示的“0条”状态。尝试使用explain()命令分析查询计划,看看是否存在热点或倾斜。

    2. 服务器资源限制:如果MongoDB服务器资源受限(内存、CPU),也可能影响mongoexport的速度。确保有足够的可用资源供其运行。

    3. 批量导入:可以考虑将大批量数据分批导出,每次导出一部分,而不是一次性处理所有数据。

    4. 优化输出格式:如果你只需要一小部分数据,试试减小输出文件的大小,比如只导出满足条件的第一万条记录:

    mongoexport ... --limit 10000
    

    解决完这些问题后,再尝试执行导出操作,应该能显著提高速度。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月23日