对于我们的高级设计项目,我的团队正在制作一个Silverlight应用程序,它利用图论的概念,并将数据存储在后端的数据库中。我们有这样一种情况,我们在图中的两个节点之间添加一个链接,然后运行分析来对节点集群进行重新分类。本质上它不是线程安全的,我们试图使它安全,这就是我们失败和需要帮助的地方:)。
create link函数如下所示:
private Semaphore dblock = new Semaphore(1, 1);
// This function is on our service reference and gets called
// by the client code
可序列化隔离模式可用于在相同ids之上时避免争用条件。因此,对于create table u(uid int primary key, name text);,如果我们运行两个类似的事务,T1和T2:
begin isolation level serializable;
select * from u where uid = 1;
然后继续使用T1和T2:
insert into u (uid, name) values (1, 'A');
在commit;之后,只有第一个成功,而另一个则引发序列化失败。
这是模式的一个非常巧妙的特性,可以在复杂事务中处理独特的密钥冲突,而不
在阅读postgres文档之后,我有两个实验不像预期的那样工作。我用postgres 12
实验1
数据准备:
CREATE TABLE Test
(
id SERIAL primary key,
level int,
value int
);
INSERT INTO Test (
level,
value
)
SELECT 1, 10 UNION ALL
SELECT 1, 20 UNION all
SELECT 1, 30 UNION ALL
SELECT 2, 100;
然后,我打开两个查询窗口。
窗口1
BEGIN TRANSACTION I
我有一个名为Account的表,其中有一个列name。列上有一个唯一的索引。我有笔交易:
begin
create an account with name("ABC")
publish an event to Kafka
end
我不知道这种情况是否会发生:
Request 1: .....transaction start.......create account name("ABC").......publish Kafka event.......commit transaction
Request 2: ..........transaction st