python+mongodb 多进程写入的问题。

2015-03-12 11:58:19 +08:00
 answerw

最近在做一个日志收集和处理系统,用到了mongodb。每个客户端收集数据解析成json通过zeromq发给服务器端处理入库,在入库的时候我想开多个进程往mongodb里面写入,但是多进程环境下,如果多个进程同时修改一个文档
例如这样的句子:
update_key = ".".join([channel,grid])
up_rv = mvod.update(
{"day":day},
{"$inc":{update_key:totalbyte}}
)

会不会产生脏数据,如果有那么请问是怎么规避的呢?大家有没有在多进程环境下使用mongodb的经验吗,如果有的话是怎样实现的呢?

6029 次点击
所在节点    Python
5 条回复
EPr2hh6LADQWqRVH
2015-03-12 12:07:34 +08:00
不会,$inc操作是atomic的
futursolo
2015-03-12 12:10:49 +08:00
锁库就可以了。
等处理完一条再把库解锁。
或者等等3.0的文档级锁。

有在用MongoDB,不过是异步的Tornado。
cevincheung
2015-03-12 12:15:18 +08:00
postgresql
answerw
2015-03-12 16:58:12 +08:00
谢谢大家!
所有操作都修改成mongodb的update operators ($set,$push,$inc)了。我用版本是2.4.12,看文档上说貌似读写删都会锁,mongodb默认是有锁的,也就是说只要使用了mongodb的更新操作器的原子操作之后,就不会有脏数据写入了。postgresql的话,不想从一个坑再跳到另一个坑了。
sxiong
2016-04-18 17:03:20 +08:00
请问楼主你多个进程可以功用一个 MongoClient 吗?希望给个代码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/176311

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX