我正在研究可以在 Postgresql 9.5 中实现的简单帐户功能的不同方式。我希望能够以最大的“可重复读取”作为事务隔离级别来做到这一点。之所以应该是“可重复读”隔离级别,是因为我们检测到了高级别的冲突“可序列化”隔离级别,即使在 10 秒内使用 10 次左右的重试策略,由于冲突的数量,它仍然失败。
它应该处理多个连接和多个用户,并且同一用户可以在不同的连接中发起存款和取款。
我目前唯一的解决方案是执行以下操作:
对于存款:
对于提款:
欢迎任何材料或示例。
我不确定其余的人。你提到了所有这些状态的东西,但这有什么关系呢?
BEGIN;
UPDATE accounts
SET balance = balance - 100
WHERE name = 'Bob';
UPDATE accounts
SET balance = balance + 100
WHERE name = 'Sally';
END;
Run Code Online (Sandbox Code Playgroud)
默认事务级别允许幻读,但这不是问题。第一个语句是一个UPDATE
. 它要么有效,要么无效。如果有效,UPDATE
则获得ROW EXCLUSIVE
锁定。UPDATE
在事务提交之前,其他人不会对该记录进行操作。
归档时间: |
|
查看次数: |
1039 次 |
最近记录: |