【发布时间】:2021-10-08 21:52:23
【问题描述】:
两者有什么区别?表面上的协议看起来不同,但我想了解两者之间的真正不同之处以及它们不等效的原因。
【问题讨论】:
标签: database distributed paxos two-phase-commit
两者有什么区别?表面上的协议看起来不同,但我想了解两者之间的真正不同之处以及它们不等效的原因。
【问题讨论】:
标签: database distributed paxos two-phase-commit
2 Phase locking 是一种在单个数据库实例中实现的机制,以实现可序列化 隔离级别。可序列化事务级别是最强的隔离,即使并行执行事务,最终结果也与串行执行的事务相同。它的工作原理如下:
每当事务想要更新一个对象/行时,它必须获取一个写/独占锁。当事务想要读取一个对象/行时,它必须获取一个读/共享锁。不是在每次查询后立即释放锁,而是必须保持锁直到事务结束(提交或中止)。因此,在执行事务时,事务持有的锁数会扩大/增长。 (读/写锁行为与其他任何读/写锁机制类似,这里不讨论)
在事务结束时,锁被释放,事务持有的锁数量减少。
由于锁是在一个阶段获得并在另一个阶段释放,即在获取阶段没有锁释放,在释放阶段没有新的锁获取,这称为2阶段锁定。
2 phase commit 是一种用于实现跨多个数据库实例的分布式事务以确保所有节点提交或中止事务的算法。
它的工作原理是让协调器(可以是启动事务的应用程序中的一个单独的服务或库)发出两个请求 - 准备到阶段 1 中的所有节点和提交(如果所有节点在准备阶段返回 OK)或 ABORT(如果任何节点在 PREPARE PHASE 中返回 NOT OK) 到阶段 2 中的所有节点。
TLDR:
2 phase locking - 用于单个数据库实例中的可序列化隔离
2 phase commit - 跨分布式数据库/数据存储的多个节点的原子提交
【讨论】: