在我的理解中,PostgreSQL使用某种监视器来猜测可序列化隔离级别是否存在冲突.许多示例都是关于在并发事务中修改相同资源,并且可序列化事务很有效.但我想以另一种方式测试并发问题.
我决定测试2个用户修改他们自己的帐户余额,并希望PostgreSQL足够智能,不会将其检测为冲突,但结果不是我想要的.
下面是我的表,有4个帐户属于2个用户,每个用户都有一个支票帐户和一个储蓄帐户.
create table accounts (
id serial primary key,
user_id int,
type varchar,
balance numeric
);
insert into accounts (user_id, type, balance) values
(1, 'checking', 1000),
(1, 'saving', 1000),
(2, 'checking', 1000),
(2, 'saving', 1000);
Run Code Online (Sandbox Code Playgroud)
表数据是这样的:
id | user_id | type | balance
----+---------+----------+---------
1 | 1 | checking | 1000
2 | 1 | saving | 1000
3 | 2 | checking | 1000
4 | 2 | saving | 1000
Run Code Online (Sandbox Code Playgroud)
现在我为2个用户运行2个并发事务.在每笔交易中,我用一些钱减少支票账户,并检查用户的总余额.如果它大于1000,则提交,否则回滚.
用户1的例子:
begin;
-- Reduce checking …Run Code Online (Sandbox Code Playgroud) 我不确定这是否是表达我的要求的正确方法.但是"fork"这个词出现在Ember Data github页面的路线图中.它是EPF的杀手级功能.我想知道我是否可以在Ember Data中做到这一点.
当我们有一个编辑页面并绑定一个模型时,fork功能非常有用.当我们编辑信息时,我不希望更改模型属性,因为如果模型属性也显示在其他位置,它们将自动更改.那不是我想要的.
一个示例是页面左侧的列表和页面右侧特定模型的编辑表单.当我在文本字段中修改角色名称时,左侧的角色名称因数据绑定而更改.

EPF通过"分叉"现有模型并将其设置在子会话中来解决此问题.EPF中的会话与Ember Data中的商店类似.修改分叉模型时,它不会影响主会话中的模型.更新分叉模型后,可以将其合并回主会话,并更新主会话中的相应模型.
我认为Ember Data中的解决方案是创建一个不同的商店并将模型复制到该商店.但它有点复杂.有没有人有更好的解决方案?我搜索stackoverflow和ember讨论论坛,但没有找到答案.