所以我的团队正在用 PHP 开发一个 API。 我主要担心的是 2 个人打电话来更新同一行会发生什么。
因此,如果一个 API 调用先读取,然后处理信息,然后写入,如果另一个 API 调用对同一行数据执行相同的操作,会发生什么情况。我们正在使用 Postgres 或 Mysql。
User has 100 dollars.
API Call 1 to ADD 20 1 reads 100.
API Call 2 to Subtract 20 reads 100.
API Call 1 writes 120;
API Call 2 write 80;( instead of 100);
我知道有一个涉及锁定表或行的解决方案,它能解决我的问题吗?
我需要一个 API 调用 2 不会失败,而是等待或重试的解决方案。
[编辑]
我应该更详细地说明我们正在做的事情。这是一个浏览器 mmo 游戏,它有 2 个部分。一个 PHP REST API 和 Java 服务器。
浏览器调用 AJAX GET API ex。 : 以 4 万美元 build 工厂 PHP API 检查资金是否充足,并返回 JSON。所以 - 来自玩家的 4 万美元。
我们的服务器 ticks 使用 boneCP 进行并发数据库调用,以更新基金等值。
因此,根据我之前的示例,CALL 1 将是我们的 PHP API,而 CALL 2 将是服务器滴答。
最佳答案
您需要了解 transactions , transaction isolation , 和 explicit row-level locking :
select ... for update
在您的情况下,还要考虑使用表达式。如果你发布类似这样的东西,你的生活会简单得多:
update account set amount = amount - 20 where id = ?
关于php - 多个应用程序访问相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20170762/