「分布式技术专题」并发系列二:基于时间的并发控制

本文详细介绍了基于时间戳的并发控制,包括基本TO、保守TO和多版本TO。基本TO直接根据时间戳排序执行事务,而保守TO通过缓冲区减少重启,多版本TO利用版本管理避免重启。所有这些方法旨在维护可串行化,减少死锁并提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

与基于加锁的并发控制不同,基于时间戳的并发控制并不试图通过互斥关系来维护可串行化, 而是先提前选择一个串行化顺序,再根据这个顺序来执行事务, 为了建立这个顺序,事务管理器需要对每个事务T进行初始化时分配一个时间戳。

时间戳时一种专门用来唯一标识每个事务并将事务排序的标识符。 唯一性、单调性是时间戳的特性,即每个时间戳都是唯一的,事务管理器生成的事务必须单调递增。

一种方式是维护一个全局的计数器,但这在分布式系统中是一个比较困难的问题。 还有一种方式是让每个节点根据本地的局部计数器独立分配时间戳。 为了维护唯一性,每个节点会将直接的标识号附加到计数器值的后面, 即时间戳是一个二元组:<局部计数器,节点ID>。节点ID作为附加在较低位, 只有在两个事务被分配了相同的局部计数值时,节点ID才能派上用场。 而每个节点访问自己的时钟,这里的时钟可以是物理时钟、逻辑时钟、混合时钟、全局时钟等等方式, 主要看分布式数据库时钟选取问题,各种时钟都有自己的优劣,需要谨慎选取。
综合上面的信息可知,可以按照时间戳来对事务的操作进行排序了。 时间戳排序(timestamp ordering,TO)的规则如下: TO规则给定事务Ti和Tj中的两个冲突操作Oik和Ojl,当且仅当ts(Ti)<ts(Tj)时,Oik会在Ojl之前执行。 ts即是对于事务T分配的唯一时间戳。

使用TO规则的调度会将每一个操作与已经调度过的冲突操作进行比较,如果新的操作属于一个较新的事务, 那么就接收它;否则它就会被拒绝,然后将相应的事务赋予新的时间戳并重新启动。

这个思路提供了基于时间戳的调度,可以保证生成可串行化的排序,不过,只有当调度程序接收到所有 需要调度的操作,时间戳之间才能比较。如果操作一个接一个传递给调度器,那么就需要以高效的方式检测 每个操作是否按照合法顺序进入。这样,每个数据项x需要被赋予两个时间戳:读时间戳rts(x)、写时间戳wts(x)。 读时间戳表示读取x的所有事务的时间戳的最大值,写时间戳表示写入x的所有事务的时间戳的最大值。 这时,当一个操作需要访问某个数据项时,调度程序就可以根据读时间戳和写时间戳来判断是否有时间戳更大的事务 访问了该数据项。

从构架上来看,事务管理器负责

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值