其他
分布式事务内幕
本文节选自《数据库系统内幕》第13章——分布式事务
何时可以认为数据已准备好提交,这时只要交换一个指针便可以让修改对外可见。
如何执行提交本身,以让事务结果在最短的时间内变得可见。
如果算法决定不提交,如何回滚事务所做的更改。
它只允许对已提交数据的可重复读取。
值是一致的,因为它们是从某个时间戳的快照中读取的。
冲突的写入将被中止并重试,以防止产生不一致。
a) 初始状态。
执行完上一个事务后,TS1是两个账户的最新时间戳。
没有锁。
b) 第一个阶段称为预写(prewrite)。
事务尝试为所有写入的单元格加锁。
其中一个锁被标记为主(primary)锁,用于客户端恢复。
事务会检查是否存在可能的冲突:
是否存在其他事务已经用更晚的时间戳写入了数据,或者在任何时间戳下是否存在未释放的锁。
如果检测到冲突则中止事务。
c) 如果成功获取了所有锁即排除了冲突的可能性,事务便可以继续执行。
第二阶段中,客户端开始释放这些锁,首先释放主锁。
它用写记录替换锁,通过该操作让写入对外可见,并更新写入元数据为最新数据点的时间戳。
往期推荐:
— END —
技术琐话
以分布式设计、架构、体系思想为基础,兼论研发相关的点点滴滴,不限于代码、质量体系和研发管理。