【发布时间】:2017-07-01 17:12:36
【问题描述】:
我有一个包含 250 万数据的 mongo 集合,并且可能会增长到 300 万。我正在使用弹簧批处理,并试图将该集合复制到另一个集合。我使用的方法如下:
-
在 tasklet 中,我创建了一个 ProcessBuilder 对象并调用了一个执行 mongo 查询的 shell 脚本。 shell脚本内容如下:
> mongo $serverURL/$dbName js-file-to-execute.js // js file contains copy command (db.collection.copyto('newCollection'))
对于较少的数据(
- 使用 mongo 模板并执行查询
dbMongoTemplate.getDb().getCollection("collection").aggregate(Arrays.asList((DBObject) new BasicDBObject("$out","newCollection")));
这会执行一个 mongo 聚合查询 db.collection.aggregate({$out : "newCollection"})
这也适用于数据较少的集合,但对于较大的数据集,它会一直运行,直到发生套接字超时并最终导致作业失败。
请建议复制数据的有效方法?
【问题讨论】:
-
您使用的是什么版本和存储引擎? MongoDB集群的结构是什么:standalone、replica set、sharded?您是否正在寻找最快的解决方案(挂钟)、使用最少的额外资源(磁盘和/或内存)或对服务器的影响最小(例如,不要挂起服务器)。
-
我使用的是 mongodb 2.6,而 mongoDB 集群是 standalone。我更喜欢一种平衡解决方案,它确实会花费大量时间,对服务器产生平均影响。
-
profesor79 的回答对你有帮助吗?我也是这种情况
-
是的,它有帮助,但您可以使用 mongo import 和 mongo export 代替 mongodump 和 mongorestore。您还可以通过管道将这些操作用于内联复制。