Php 多个应用程序访问同一数据
所以我的团队正在用PHP开发一个API。 我主要关心的是两个人打电话更新同一行时会发生什么 因此,如果一个API调用先读取然后处理信息,然后写入,那么如果另一个API调用对同一行数据执行相同的操作,会发生什么情况。我们正在使用Postgres或MysqlPhp 多个应用程序访问同一数据,php,mysql,database,postgresql,Php,Mysql,Database,Postgresql,所以我的团队正在用PHP开发一个API。 我主要关心的是两个人打电话更新同一行时会发生什么 因此,如果一个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 Ca
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游戏,它有两个部分。一个PHP REST API和Java服务器
该浏览器使AJAX获得API调用,例如:以4万美元的价格构建工厂
PHP API检查是否有足够的资金,并返回JSON。所以-玩家提供4万美元
我们的服务器使用boneCP进行并发数据库调用,以更新资金等价值
因此,从我前面的示例中,调用1将是我们的PHP API,调用2将是服务器标记。您需要了解,并且:
在您的情况下,还要考虑使用表达式。如果你发布以下信息,你的生活会简单得多:
update account set amount = amount - 20 where id = ?
您需要了解,以及:
在您的情况下,还要考虑使用表达式。如果你发布以下信息,你的生活会简单得多:
update account set amount = amount - 20 where id = ?
您的API设计糟糕,需要修复。而不是:
SERIALIZABLE
隔离,请执行适当的SELECT。。。对于更新
命令,如果要在事务中执行读-修改-写操作
您需要避免由客户端应用程序执行
在读-修改-写不可避免的情况下,两个或多个API调用必须保持一致,您应该使用来防止更新冲突。在这种情况下,您的场景将如下所示:
您的API设计糟糕,需要修复。而不是:
SERIALIZABLE
隔离,请执行适当的SELECT。。。对于更新
命令,如果要在事务中执行读-修改-写操作
您需要避免由客户端应用程序执行
在读-修改-写不可避免的情况下,两个或多个API调用必须保持一致,您应该使用来防止更新冲突。在这种情况下,您的场景将如下所示:
重新考虑酸的性质,并确保它们得到保存。之后,使用可序列化隔离级别检查SS2PL和Postgres将防止您写入错误的值(尽管您必须处理错误),重新考虑ACID属性并确保它们被保留。之后,使用可序列化隔离级别检查SS2PLWith Postgres将防止您写入错误的值(您必须处理