【发布时间】:2013-02-07 20:02:09
【问题描述】:
我想做的是用 cron 每隔几分钟执行一次相同的脚本。
脚本需要处理从数据库读取的一些数据,所以显然我需要它每次都在不同的行上工作。
我的概念是使用 行锁定 来确保每个实例在不同的行上工作,但它似乎不是这样工作的。 甚至可以以这种方式使用行锁吗?还有其他解决方案吗?
例子:
while($c < $limit) {
$sql=mysql_query("SELECT * FROM table WHERE ... LIMIT 1 FOR UPDATE");
$data=mysql_fetch_assoc($sql);
(process data)
mysql_query("update table set value=spmething, timestamp=NOW()");
$c++;
}
基本上我需要的是 SCRIPT1 从表中读取 R1; SCRIPT2 读取 R2(下一个非锁定行匹配条件)
编辑: 比如说: 1)该表存储了一个URL列表 2) 脚本检查 URL 是否响应,并在数据库中更新其状态(和时间戳)
【问题讨论】:
-
你不能使用事务吗?
-
这些行是否相互独立?如果您有一个主脚本组成一个要处理的行列表,然后将该列表分割成一堆单独的子脚本来进行处理,可能会更好。
-
您是否害怕每 5 分钟运行的实例会持续超过 5 分钟,或者您想显式运行 X 个实例?
标签: php mysql innodb rowlocking