You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB百万级文档跨集合复制的性能问题与优化咨询

解决MongoDB百万级文档复制的性能与资源问题

首先,在mongosh循环中加入休眠是可行的,通过sleep()函数可以控制处理节奏,避免对数据库造成持续高负载。比如每处理固定数量的文档后暂停一段时间:

let count = 0;
db.source_collection.find().forEach(function(doc) {
    db.dest_collection.insertOne(doc);
    count++;
    // 每处理1000条文档休眠100毫秒
    if (count % 1000 === 0) {
        sleep(100);
    }
});

但这种单条插入的方式本身效率极低,百万级数据会耗费大量时间,且资源利用率不高,更推荐以下几种高效解决方案:

更优解决方案

1. 批量写入(bulkWrite)

批量操作能大幅减少网络往返和数据库IO开销,建议每批次处理1000-5000条文档:

const batchSize = 1000;
let batch = [];

db.source_collection.find().forEach(function(doc) {
    batch.push({ insertOne: { document: doc } });
    if (batch.length === batchSize) {
        db.dest_collection.bulkWrite(batch);
        batch = [];
        // 可选:批量写入后添加短休眠,进一步降低负载
        sleep(50);
    }
});

// 处理剩余未批量的文档
if (batch.length > 0) {
    db.dest_collection.bulkWrite(batch);
}

2. 聚合管道$out/$merge操作

这是服务器端直接完成复制的高效方式,无需客户端中转数据:

  • 如果目标集合不存在,或可以直接覆盖目标集合,用$out:
db.source_collection.aggregate([
    { $out: "dest_collection" }
]);
  • 如果目标集合已存在,需要合并数据(比如保留原有文档、替换或更新),用$merge:
db.source_collection.aggregate([
    { $merge: { 
        into: "dest_collection", 
        on: "_id", 
        whenMatched: "keepExisting", // 匹配时保留目标文档,可改为replace/merge等
        whenNotMatched: "insert" // 不匹配时插入新文档
    } }
]);

3. 官方命令行工具

对于超大规模数据复制,官方工具比mongosh脚本更高效:

  • mongodump + mongorestore:适合跨实例复制,支持控制并发和批次:
# 导出源集合
mongodump --db your_db --collection source_collection --out ./dump
# 导入到目标集合
mongorestore --db your_db --collection dest_collection ./dump/your_db/source_collection.bson
  • mongoexport + mongoimport:支持导出为JSON/CSV格式后再导入,灵活度更高:
mongoexport --db your_db --collection source_collection --out source_data.json
mongoimport --db your_db --collection dest_collection --file source_data.json

4. 集群级同步机制

如果是在同一集群内复制或需要持续同步:

  • 将目标集合设为源集合的只读副本(副本集环境适用)
  • 使用Change Streams监听源集合的变更,实现实时增量同步

内容的提问来源于stack exchange,提问作者user1942626

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:15:15