MongoDB集群如何高效的复制Collection

目前有一套MongoDB集群,集群中存在Collection A,新建一个Collection B,想要通过Mongos将Collection A中的数据复制到Collection B中,请问有哪些高效的实现方式?

目前了解到的复制Collection的方法有两种:
1、官方文档中提到的db.cloneCollection(from, collection, query),该方法不能通过Mongos进行操作,而且是将远程的Collection复制到本地,看起来不太符合需求。
2、使用脚本遍历Collection A,逐条将数据插入到Collection B中。

db.复制源表.find().forEach(function(x){
    db.目的表.insert(x);
})

这种实现比较符合需求,但是存在另外一个问题:逐条查询源表并插入到新表,必定会有很大开销(数据数量大概在4000w条,100GB左右)。

想请教各位大牛,有没有什么更加高效便捷的方法实现题设需求?如果没有更便捷的方法,那么上述的两种方法存在哪些可以改进的地方呢?
谢谢!

阅读 6k
3 个回答

你的第二种方法,你可以监控你的MongoDb集群的状态,当比较闲置的再去循环复制你的数据,若监控到你的集群负载比较大了,就停止复制。等到监控到下次集群闲置的时候,在重上次复制结束的地方开始

export出来,再import进去

新手上路,请多包涵

--超高效复制表. b表如果有数据,将会删除。
db.a.aggregate({ $out : "b" });

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进