MongoDB 多线程访问下的数据不一致问题


  • 註冊用戶

            问题的现象是这样的,我们使用Mongo的C库进行开发,当线程A对一个Collection中的某条记录调用了mongo_update的语句以修改属性P后,线程B访问该条记录的属性P,结果却发现P的值还是线程A修改前的值。我一度认为这是因为Mongo将数据放进内存没有更新所导致的数据不一致,但是后来做了几个实验发现即使线程B延时3~5秒后访问该条记录,读到的P依旧是修改前的值。这两个线程使用的是不同的Mongo连接。

    我上网搜了一下,发现好像没人遇到我这个问题。。我对此也暂时没有好的解决方案,在这里想请教各位大牛帮我分析一下这个数据不一致问题可能是由哪个原因造成的呢?

    另外就是Mongo开发的C库,像mongo_update,mongo_remove这些方法,其调用返回的时候往往该操作没有结束,如果此时另外一个线程访问Mongo库的话,会对访问数据造成影响吗?



  • 当线程A修改数据之后,用shell环境命令查一下资料,看是否修改过来,如果已经修改过来了,那么线程B读取的还是以前的值,可能线程B读的是缓存的数据,清除一下Mongo的缓存试一试。


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待