我必须根据有超过7000万行的表中的每一行执行一些网络IO。由于需要高的TPS,所以我已经创建了一个php脚本,它为表中的单个行执行此任务。我计划每秒钟使用cron作业调用这个php脚本40次。如何做到这一点,使没有两个脚本访问同一行。
发布于 2011-02-13 06:40:23
若要完全基于表进行此操作,需要在表中设置指示已处理行的布尔值、时间戳、删除行等。在此之后,您所需要的就是一个事务。
START TRANSACTION;
SELECT * FROM table WHERE processing = 0 ORDER BY id ASC LIMIT 1 FOR UPDATE;
UPDATE table SET processing = 1 WHERE id = $id_of_what_we_got;
COMMIT;
-- process row here
-- optionally, tell the db we're done
UPDATE table SET processing = 2 WHERE id = $id_of_what_we_got;只需确保对整个事务使用相同的MySQL连接(PHP资源)。
进一步读:
https://stackoverflow.com/questions/4982774
复制相似问题