【发布时间】:2013-11-24 03:32:58
【问题描述】:
所以我的团队正在用 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 万美元建造工厂 PHP API 检查是否有足够的资金,并返回 JSON。 SO - 来自玩家的 4 万美元。
我们的服务器报价有并发数据库调用,使用 boneCP 来更新资金等值。
因此,在我之前的示例中,CALL 1 将是我们的 PHP API,而 CALL 2 将是服务器滴答声。
【问题讨论】:
-
重新考虑 ACID 属性并确保它们被保留。之后检查 SS2PL
-
使用可序列化隔离级别的 Postgres 会阻止您写入错误的值(尽管您必须处理错误)
标签: php mysql database postgresql