mysql数据库中的并发访问问题

时间:2010-02-23 20:19:31

标签: sql mysql database concurrency

我正在编写一个python脚本,它将创建一个从数据库中获取和执行任务的子进程。

任务由运行在同一台机器上的php网站插入数据库。

选择并更新这些任务的好处(需要快速)方法,以避免被python脚本多次选中

编辑:数据库是mysql

提前致谢

3 个答案:

答案 0 :(得分:1)

在不了解您的架构的情况下,我建议使用以下方法。

1) Lock Process table
2) Select ... from Process table where State="New"
3) processlist = [list of process id''s from step 2]
4) Update Process table set State="In progress" where ProcessId in [processlist]
5) Unlock Process table.

答案 1 :(得分:1)

加快速度的方法是将进程放入存储过程,并从该过程返回选定的行。这样,只有一次到数据库服务器。

答案 2 :(得分:1)

使用InnoDB表Tasks,然后:

select TaskId, ... from Tasks where State="New" limit 1;
update Tasks set State="In Progress" where TaskId=<from above> and State="New";

如果更新成功,您可以处理该任务。否则,请再试一次。

你需要一个关于TaskId和State的索引。