重要:mongodb在网络环境不太好的情况下,在应用层会直接丢数据

一个简单的循环:

(0..1000).each{

   db.testTable.insert([name:"aaa"+it])

}

上面的测试在局域网是正常的。但如果连接互联网的数据库(网络环境稍差),程序插入了1000条,但你会发现数据库里只有900多条。其原因,我猜测只能是mongodb接受的数据太快了(因为网络延迟,可能突然来一个大数据包),超出了mongo的处理能力,它就直接把超出它队列的数据丢掉了。这个bug真是太坑人了。

为什么说不是网络丢包呢?因为在客户端和mongo服务端都没有报错,所以肯定不是tcp包丢失的问题。mongod在应用层应该是收到了所有的包了。但是它不能处理的话,难道不能丢个错出来?而要默默地把数据扔掉?

此问题在使用语句得到解决,此语句是:

mongo.setWriteConcern(WriteConcern.SAFE)

也就是用同步写来解决问题。原先默认的是异步写。

使用mongodb的朋友,上述问题要切记。另,我测试的版本是2.2.2



转载于:https://my.oschina.net/showapi/blog/104005

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值