Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我仍在尝试深入了解使用 Mnesia 可以做什么,而这两个问题的答案将大有帮助。
1) 如果一个进程对记录 X 执行原子事务,而其他进程执行涉及同一记录的脏事务,会发生什么情况。第一个进程的 ACID 属性是否受到损害?
2) 有没有办法让同一进程在一个表的行上持有非脏 (mnesia:transaction/1) 读锁,同时对另一个表执行脏操作?
像 Mnesia 一样,在允许脏操作的数据库环境中,隔离保证会丢失。所以问题 1) 的答案是肯定的,行为良好的事务过程可能会受到并发脏操作的影响,反之亦然 - 例如,脏读可能会返回“旧”甚至新删除的数据,而内在的危险脏写很明显。
在您的第二种情况下,答案是肯定的,原因有两个:只有您正在读取的数据对象被锁定,并且只有您的本地副本!这通常是一件很好且有用的事情,甚至允许在其他数据对象(当然包括其他表)上发生并发事务。
Erlang Mnesia 文档,第 4 章