我仍然在努力深刻理解Mnesia可以做些什么,对这两个问题的回答会有很大帮助。
1)如果一个进程对Record X执行原子事务而另一个进程执行涉及同一记录的脏事务,会发生什么。第一个流程的ACID属性是否受到损害?
2)同一进程是否有办法在一个表的行上保持非脏(mnesia:transaction / 1)读锁,同时在另一个表上执行脏操作?
答案 0 :(得分:1)
在允许脏操作的数据库环境中,隔离保证会丢失,正如Mnesia所做的那样。因此问题1)的答案是肯定的,表现良好的事务处理过程可能会受到并发脏操作的影响,反之亦然 - 例如,脏读将返回“旧”或甚至新删除的数据,同时存在固有的危险脏写很明显。
在您的第二个场景中,答案是肯定的,原因有两个:只有您自己的数据对象 阅读被锁定,只有你的本地副本!这通常是一件好事和有用的事情,甚至允许在其他数据对象(当然包括其他表)上进行并发事务。