鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ MongoDB集群如何高效的復(fù)制Collection

MongoDB集群如何高效的復(fù)制Collection

目前有一套MongoDB集群,集群中存在Collection A,新建一個(gè)Collection B,想要通過(guò)Mongos將Collection A中的數(shù)據(jù)復(fù)制到Collection B中,請(qǐng)問(wèn)有哪些高效的實(shí)現(xiàn)方式?

目前了解到的復(fù)制Collection的方法有兩種:
1、官方文檔中提到的db.cloneCollection(from, collection, query),該方法不能通過(guò)Mongos進(jìn)行操作,而且是將遠(yuǎn)程的Collection復(fù)制到本地,看起來(lái)不太符合需求。
2、使用腳本遍歷Collection A,逐條將數(shù)據(jù)插入到Collection B中。

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

這種實(shí)現(xiàn)比較符合需求,但是存在另外一個(gè)問(wèn)題:逐條查詢?cè)幢聿⒉迦氲叫卤?,必定?huì)有很大開(kāi)銷(數(shù)據(jù)數(shù)量大概在4000w條,100GB左右)。

想請(qǐng)教各位大牛,有沒(méi)有什么更加高效便捷的方法實(shí)現(xiàn)題設(shè)需求?如果沒(méi)有更便捷的方法,那么上述的兩種方法存在哪些可以改進(jìn)的地方呢?
謝謝!

回答
編輯回答
帥到炸

export出來(lái),再import進(jìn)去

2017年4月15日 12:29
編輯回答
痞性

你的第二種方法,你可以監(jiān)控你的MongoDb集群的狀態(tài),當(dāng)比較閑置的再去循環(huán)復(fù)制你的數(shù)據(jù),若監(jiān)控到你的集群負(fù)載比較大了,就停止復(fù)制。等到監(jiān)控到下次集群閑置的時(shí)候,在重上次復(fù)制結(jié)束的地方開(kāi)始

2018年2月22日 05:02