【发布时间】:2013-08-27 11:59:56
【问题描述】:
这是我从未完全掌握的东西,我想知道我是否做得对并检查它是否合理。
....
我有一个数据库links,让我们保持简单,2 列
....
然后我有一个 API,当查询返回“就绪”项目的 ID 时,该 API 可以同时调用多次,我想确保 ID 只给出一次。
....
API MySQL 查询..
锁定表`链接`写 SELECT ID FROM links WHERE status = 'ready' LIMIT 1 // 得到一个准备好的 UPDATE links SET status = 'in progress' WHERE ID = 'X' // 更新刚刚从上面一行获得的链接正在进行中(因此未被另一个 API 调用选择 解锁桌子因此,如果两个 API 调用相隔 0.01 秒,第一个应该锁定表更新它进行中,解锁后第二个有机会并做同样的事情,但选择与第一个不同的 ID .
这是正确的吗?还是做这种事情的最好方法?因为它似乎会导致 MySQL 流量长时间延迟,一些查询等待 5 分钟左右,然后 MySQL 达到最大连接数,这会导致各种其他问题。
该表是 InnoDB,相对较小,大约有 165k 行,带有关于状态的索引,提前感谢您的任何建议或指点。
【问题讨论】:
-
ID 是唯一的,即由每个访问者创建还是设置并分配给访问者?
-
不,它只是一个充满了具有唯一 ID 的资料的数据库,并且对 API 的每次调用都应该提供不同的 ID,不要欺骗。
标签: php mysql sql locking innodb