两阶段提交被描述为“原子承诺协议”.我希望这意味着所有客户端在事务提交之前或提交之后都会看到世界状态 – 没有中间状态.似乎它可以进入一个事务部分提交的状态,客户端看到不一致的数据,打破原子性.
考虑具有两个数据库A和B的情况.如果在A提交之后但在B已提交之前的提交阶段期间存在分区,则部分提交事务.查询A和B的用户将看不到一致的数据 – 事务已在A上提交,但B具有提交前的数据.
ACID的“一致”部分似乎也被破坏了 – 查询A和B的客户可能会看到违反业务规则的数据.
我想这个想法是,当分区结束并且事务管理器指示B提交时,系统最终将能够从中恢复.与此同时,系统处于不一致的“部分承诺”状态.是不是要防止这种原子性的全部要点?恢复一致性时,可能已经造成了损害.
当两阶段提交被认为是原子时,会引用什么属性?
最佳答案 原子意味着操作将产生一些影响或系统将保持相同的状态. 2PC算法的工作原理是协调器首先要求所有分布式机器为事务做准备.收到“是”后,它会发送命令以提交事务.
如果协调员仅从所有机器获得成功,则交易完成,否则如果在此之后或任何其他问题中出现网络中断,则您将陷入两个将军的问题.它的原子和分布式系统一样多.
只有隔离级别才能实现一致性.是否允许读取和允许脏读.