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