我正在使用mongo java API迭代来自mongo从站的整个mongo文档。Mongo Server: 2.4.10备机记录数:3亿。我有一个mongo主人,一个mongo奴隶。(未进行切分)
mongo从服务器每10秒复制一次非常频繁的2000次插入和删除操作。
迭代耗时超过10个小时。我的目标是获取集合中的每条记录,创建一个csv并将其加载到redshift。
DB db = null;
DBCursor cursor = null;
mongo = new MongoClient(mongoHost);
mongo.slaveOk();
db = mongo.getDB(dbName);
DBCollection dbCollection = db.getCollection(dbCollectionName);
cursor = dbCollection.find();
while (cursor.hasNext()) {
DBObject resultObject = cursor.next();
String uid = (String) ((Map) resultObject.get("user")).get("uid");
String category = (String) resultObject.get("category");
resultMap.put(uid, category);
if (resultMap.size() >= csvUpdateBatchSize) {
//store to a csv - append to an existing csv
}}
有没有办法将迭代时间降低到1小时以下?基础设施的改变也可以通过增加分片( ..Like )来完成。请提个建议。
发布于 2014-08-20 04:18:04
你有没有考虑过在你的集合上执行一个并行的mongoexport?
如果你有办法用一个查询来划分你的数据(类似于对id或索引字段进行取模),并将其作为标准输入传递给你的程序。
然后,您的程序将把每个文档作为一个JSON行进行处理,您可以将其加载到使用GSON或其他类似库表示文档结构的指定对象中
并最终在该对象上运行逻辑。
使用mongoexport并添加并行性可以大大提高您的性能。
https://stackoverflow.com/questions/24649159
复制相似问题