我有一个包含 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'))
Run Code Online (Sandbox Code Playgroud)对于较少的数据(< 200 k),它工作正常,但对于 200 万数据,它挂起 mongo 服务器并且作业因 Socket Exception 而失败
dbMongoTemplate.getDb().getCollection("collection").aggregate(Arrays.asList((DBObject) new BasicDBObject("$out","newCollection")));
这将执行一个 mongo 聚合查询 db.collection.aggregate({$out : "newCollection"})
这也适用于数据较少的集合,但对于较大的数据集,它会一直运行,直到发生套接字超时并最终使作业失败。
请建议复制数据的有效方法?
//Fastest way to copy a Collection in MongoDB
db.getCollection('OriginalCollection').aggregate([ { $out: "ClonedCollection" } ]);
Run Code Online (Sandbox Code Playgroud)
此命令在大约 2-3 分钟内复制了 200 万条记录的集合。
https://gist.github.com/tejzpr/ff37324a8c26d13fef08c318278c0718
| 归档时间: |
|
| 查看次数: |
3182 次 |
| 最近记录: |