php+mysql模拟消息队列死循环问题?

我要解决什么问题?数据库现在有五万条state=600的数据,每次取出1000条进行处理,我需要每五分钟跑一次crontab,将这五万条数据的state变为state=700
我是怎么做的?
while(true)
{
//每次取出1000条进行处理
$sql='select*fromtable_awherestate=600limit1000';
$multi_row=$db->query($sql)->get_result();
if(!$multi_row)
{
break;
}
//处理队列中的这1000条数据,1改变table_a中state的状态,2在table_b修改一些数据,
//这两个操作有一个执行不成功我就需要回滚事务
foreach($multi_rowas$val)
{
$db->star_trance();
if(!$db->table_a->do_something(['state'=>700]))
{
$db->rollback();
}
if(!$db->table_b()->do_something())
{
$db->rollback();
}
$db->change()
$db->commint()
}
}
上述解决方案遇到的问题我发现每当失败回滚后,数据库会每次查出这条状态没有修改成功的state=600的数据,这就导致了上面$multi_row永远不会空,进而导致整个while循环变成死循环,我又想到我可以统计大概的循环次数,一到循环次数就强制退出,可下次crontab依然会遇到这个问题,我该怎么办?
叮当猫咪
浏览 469回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript