python批量执行update命令

我有个数据,需要每次处理十万级别的数据,然后并统计更新到mongo上,用传统的pymongo方法将数据跨国update,消耗的速度赶不上数据生成的速度,结果数据库果断硬盘满了。

后来查了一下,一开始打算用motor,但是它要求我的程序必须要和tornado的ioloop接入,不爽,继续换,然后发现pymongo的新版里居然有bulk支持了,so升级pymongo到2.7(要慎重,据说这个版本和mongokit不兼容),然后再改代码跑看看,果断还是不行,再看文档,提示要我把mongodb升级到2.6.0 ,还好mongo升级后没啥复杂的问题,于是升级,于是当当当,运算极快,十万级别的update,只要二十秒左右。原版因为跨国网络通讯的关系,十万条更新要一个小时左右。

 

示例代码

原版的:

stat_proxy_remote_coll.update(query, update, upsert=True) for i in [1..1000]

新版的:

bulk = stat_proxy_remote_coll.initialize_ordered_bulk_op()

bulk.find(query).upsert().update(update) while i in [1..1000]

bulk.execute()

Leave a Reply