NoSQL数据库MongoDB的日常使用小结(一)
本文主要记录在对MongoDB数据库进行数据更新的一些基本操作和方法,如有错误,烦请批评指正。 背景:
解决方案
1.update()一开始没考虑很多,满以为MongoDB的数据更新操作会很快,就直接使用了MongoDB的update函数实现,实现代码如下:(update的一些其他操作这里就不在详细叙述了,如有疑问可参考MongoDB的官网) //更新查询条件
DBObject updateCondition = new BasicDBObject();
updateCondition.put("numApplication",numApplication);
//更新数据
DBObject updatedValue = new BasicDBObject();
updatedValue.put("tags",tags);
//执行更新
DBObject updateSetValue = new BasicDBObject("$set",updatedValue);
coll.update(updateCondition,updateSetValue);
单条数据更新测试时间如下: 1000条数据更新时间为:6966ms
1000条数据更新时间为:6529ms
1000条数据更新时间为:6607ms
1000条数据更新时间为:6573ms
1000条数据更新时间为:10903ms
1000条数据更新时间为:6524ms
1000条数据更新时间为:6711ms
1000条数据更新时间为:6511ms
1000条数据更新时间为:6615ms
1000条数据更新时间为:6580ms
1000条数据更新时间为:7529ms
.....
做到这里,其实大家可想而知,单条更新的速度其实是奇慢无比的,果不其然,慢的真的是令人发指,160w+的数据更新,粗略算了一下,大概要3个小时。如果每一次更新一下数据都要3个多小时的话,我就只能呵呵哒了呀,此方法明显不可取。 2.bulk.find().upsert().update()这种批量更新的需求是显而易见的,我也相信MongoDB肯定做过这样的事情了,只不过是本人只是甚少的缘故而已。所以就开始搜寻各种博客、官档探寻数据的批量更新,终于功夫不负有心啊,在博客[1]中看到了批量更新的影子,也就是标题中的bulk方法,于是就去查找关于bulk的一些用法,终于实现了MongoDB数据的批量更新,实现代码如下:(关于bulk的详细方法请参考MongoDB的官档。) //循环添加更新数据
for(int i=0;;){
//初始化BulkWriteOperation
BulkWriteOperation bulk = coll.initializeOrderedBulkOperation();
//更新条件
DBObject updateCondition = new BasicDBObject();
updateCondition.put("numApplication",numApplication);
//更新数据
DBObject updatedValue = new BasicDBObject();
updatedValue.put("tags",tags);
DBObject updateSetValue = new BasicDBObject("$set",updatedValue);
//更新累计
bulk.find(updateCondition).upsert().updateOne(updateSetValue);
//批量更新
if((++i) % 10000 == 0){
bulk.execute();
bulk = coll.initializeOrderedBulkOperation();
System.out.println("批量更新数据完成");
}
}
批量数据更新时间测试如下: 1000条数据更新时间为:450ms 1000条数据更新时间为:425ms 1000条数据更新时间为:413ms 1000条数据更新时间为:329ms 1000条数据更新时间为:419ms 1000条数据更新时间为:350ms 1000条数据更新时间为:719ms 1000条数据更新时间为:361ms 1000条数据更新时间为:349ms 1000条数据更新时间为:349ms 1000条数据更新时间为:382ms 1000条数据更新时间为:388ms 1000条数据更新时间为:382ms 1000条数据更新时间为:350ms 看到这里,终于应该感到欣慰了,这个时间相对来说已经提高了将近20倍左右,更新的时间也大大缩减了,大功告成。
参考文献[1] http://stackoverflow.com/questions/30027608/mongodb-slow-update-loop (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |