5

我仍在尝试深入了解使用 Mnesia 可以做什么,而这两个问题的答案将大有帮助。

1) 如果一个进程对记录 X 执行原子事务,而其他进程执行涉及同一记录的脏事务,会发生什么情况。第一个进程的 ACID 属性是否受到损害?

2) 有没有办法让同一进程在一个表的行上持有非脏 (mnesia:transaction/1) 读锁,同时对另一个表执行脏操作?

4

1 回答 1

1

像 Mnesia 一样,在允许脏操作的数据库环境中,隔离保证会丢失。所以问题 1) 的答案是肯定的,行为良好的事务过程可能会受到并发脏操作的影响,反之亦然 - 例如,脏读可能会返回“旧”甚至新删除的数据,而内在的危险脏写很明显。

在您的第二种情况下,答案是肯定的,原因有两个:只有您正在读取的数据对象被锁定,并且只有您的本地副本!这通常是一件很好且有用的事情,甚至允许在其他数据对象(当然包括其他表)上发生并发事务。

Erlang Mnesia 文档,第 4 章

于 2012-11-10T06:18:11.100 回答