php + mongodb 百万级记录批量remove异常问题

本文介绍了在使用PHP配合MongoDB进行大批量删除操作时遇到的超时异常问题。默认的30秒超时限制可能导致在remove操作后执行的其他查询失败。解决方案是设置更长的超时时间,例如600秒,以确保操作完成。此外,还讨论了PHP页面关闭后MongoDB操作仍在继续的问题,这是一个潜在的困扰,目前尚未找到在关闭页面后能立即终止MongoDB操作的方法。
摘要由CSDN通过智能技术生成

1.       大批量insertupdateremove中可能会因为操作超时而发生异常

在对php+mongodb进行性能测的过程中发现一个问题,mongodb的insert,update,remove等函数有一个默认的30秒超时问题

如:

$coll->remove();

试图使用上面的语句清空coll中的所以记录是,你会发现若果在上面语句的后面加一句:

$count = $coll->count();用来测试remove返回时是不是真已经删空了

后面这条语句就会触发一个30秒超时的异常,经过研究我发现其实是remove操作超过了30秒,在remove中30秒都还没收到数据库的回应信息,remove将返回(但其实remove这条指令已经下发给数据库,因此删除操作还继续执行)返回后接着执行$count = $coll->count();,但是这里就有问题了,因为这时候remove删除操作没没结束,

貌似remove语句给数据库上锁了,$count = $coll->count();执行的时候由于remove操作还没完成,也就是还没解锁,就等呀等呀,30秒超时后抛出异常,终止。


remove原型:

public bool|array MongoCollection::remove ([ array 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值