我仍在尝试深入了解 Mnesia 可以做什么,这两个问题的答案将会有很大帮助。
1) 如果一个进程对记录 X 执行原子事务,而其他进程执行涉及同一记录的脏事务,会发生什么情况。第一个进程的 ACID 属性是否受到损害?
2)有没有办法让同一个进程在一个表的行上持有非脏(mnesia:transaction / 1)读锁,同时对另一个表进行脏操作?
在允许脏操作的数据库环境中,隔离保证会丢失,就像 Mnesia 一样。因此,问题 1)的答案是肯定的,行为良好的事务处理过程可能会受到并发脏操作的影响,反之亦然 - 例如,脏读可能会返回“旧”甚至新删除的数据,而固有的危险脏写是显而易见的。
在第二种情况下,答案是肯定的,原因有两个:只有您正在读取的数据对象被锁定,并且只有您的本地副本被锁定!这通常是一件很好且有用的事情,甚至允许在其他数据对象(当然包括其他表)上发生并发事务。