将具有大量数据的mongo集合复制到另一个集合?

时间:2016-05-04 15:43:39

标签: mongodb nosql

我有一个拥有250万数据的mongo集合,可能会增长到300万。我正在使用spring批处理,并试图将该集合复制到另一个集合。我使用的方法如下:

  • 在一个tasklet中,我创建了一个ProcessBuilder对象,并调用了一个执行mongo查询的shell脚本。 shell脚本的内容如下:

    >  mongo $serverURL/$dbName js-file-to-execute.js
    
    // js file contains copy command (db.collection.copyto('newCollection'))
    

对于较少的数据(<200 k),它工作正常,但对于200万个数据,它挂起mongo服务器并且作业因Socket异常而失败

  • 使用mongo模板并执行查询

dbMongoTemplate.getDb().getCollection("collection").aggregate(Arrays.asList((DBObject) new BasicDBObject("$out","newCollection")));

执行mongo聚合查询db.collection.aggregate({$out : "newCollection"})

这也适用于数据量较少的集合,但对于较大的数据集,它会一直运行,直到发生套接字超时,并在最后失败。

请建议有效的数据复制方式?

2 个答案:

答案 0 :(得分:1)

要复制此集合,我将使用mongodump / mongoexport

进行复制
  

mongodump --db databaseName --collection collectionName --out directory-path

然后复制目录directory-path,然后使用

在目标计算机上恢复
  

mongorestore --db databaseName --collection collectionName directory-path

答案 1 :(得分:1)

//Fastest way to copy a Collection in MongoDB
db.getCollection('OriginalCollection').aggregate([ { $out: "ClonedCollection" } ]);

此命令在大约2-3分钟内复制了200万条记录的集合。

https://gist.github.com/tejzpr/ff37324a8c26d13fef08c318278c0718