一种基于分布式数据库的快照隔离实现方法技术

技术编号:33288541 阅读:54 留言:0更新日期:2022-05-01 00:02
本发明专利技术公开一种基于分布式数据库的快照隔离实现方法,涉及分布式数据库技术领域,包括:在事务启动时,赋予事务一个读时间戳readTS和一个写时间戳writeTS;当数据项Q发生读操作时,判断目标key上是否存在排他锁,判断排他锁是否小于等于当前事务的readTS,若两者都是,则首先执行push操作,解锁,随后读取目标key上的value,完成本次读操作;当数据项Q发生写操作时,检查数据项Q上是否存在排他锁,若存在,则执行push abort操作,尝试abort对方事务,abort失败则进入队列等待,直到事务提交被唤醒,abort成功则解锁,随后执行写操作并产生排他锁,若不存在,则直接执行写操作并产生排他锁。本发明专利技术可以让分布式数据库在没有写偏序的场景中获得更高的吞吐量和更低的事务延迟。的场景中获得更高的吞吐量和更低的事务延迟。的场景中获得更高的吞吐量和更低的事务延迟。

【技术实现步骤摘要】
一种基于分布式数据库的快照隔离实现方法


[0001]本专利技术涉及分布式数据库
,具体的说是一种基于分布式数据库的快照隔离实现方法。

技术介绍

[0002]Percolator事务模型:Percolator事务模型是对谷歌的一款数据库Percolator的事务实现的抽象。它通过把事务产生的锁和数据一起保存到存储引擎,解决了分布式环境中锁的高可用、持久化、自平衡等问题;同时,在一个事务产生的所有锁中选择一个作为primary lock,它是这个事务在整个集群的同步点,唯一性地指示事务的状态,其余的lock在逻辑上都是指向primary lock的指针。当其它事务与当前事务发生冲突时,需要通过lock指针来检查同步点(primary lock)的状态决定冲突处理方式。
[0003]MVCC:多版本并发控制,每个数据项Q维护多个版本Q1、Q2...Qn,一个事务txni根据它的时间戳i读取j<=i的最大的数据项Qj。txni的写操作根据并发控制协议的不同会采取不同的处理措施。
[0004]时间戳排序并发控制协议:每个数据项Q维护两个时间戳,r

ts保存成功读取过Q的所有事务的最大时间戳,w

ts保存成功执行write(Q)的事务的最大时间戳。时间戳排序协议的运作方式如下:
[0005](1)假设事务Ti发出read(Q)操作
[0006]a:若ts(Ti)<w

ts(Q),则Ti需要读入的Q值已经被覆盖。因此read操作被拒绝,事务Ti会滚。
[0007]b:若ts(Ti)>=w

ts(Q),则执行read操作,r

ts(Q)被设置为max(r

ts(Q),ts(Ti))。
[0008](2)假设事务Ti发出write(Q)操作
[0009]a:若ts(Ti)<r

ts(Q),则Ti产生的Q值是先前执行的事务需要的值,且系统已经假定该值不会再产生,因此write操作被拒绝,事务Ti回滚。
[0010]b:若ts(Ti)<w

ts(Q),则Ti试图写入的Q值已经过时,因此write操作被拒绝,事务Ti回滚。
[0011]c:其它情况,系统执行写入操作,将w

ts(Q)设置为ts(Ti)。
[0012]基于Percolar事务模型、以MVCC+时间戳排序实现的分布式数据库,虽然能够实现Serializability的隔离级别,并且集群能有良好的扩展性,但是由于时间戳排序是一个较为乐观的并发控制协议,所以在高并发场景下会发生大量的回滚,导致事务的并发度降低,事务延迟增高。

技术实现思路

[0013]本专利技术针对目前技术发展的需求和不足之处,提供一种基于分布式数据库的快照隔离实现方法。
[0014]本专利技术的一种基于分布式数据库的快照隔离实现方法,解决上述技术问题采用的技术方案如下:
[0015]一种基于分布式数据库的快照隔离实现方法,该方法通过调整事务的时间戳达到解决冲突的目的,具体流程包括:
[0016]步骤S1、在事务启动时,赋予事务一个读时间戳readTS和一个写时间戳writeTS;
[0017]步骤S2、当一个针对数据项Q的读操作发生时,判断目标key上是否存在排他锁,
[0018]2a)若存在排他锁,则继续判断排他锁是否小于等于当前事务的读时间戳readTS,2a.1)若是,那么执行push操作,检查排他锁是否处于finalized状态,
[0019]若是,则解除排他锁,读取目标key上的value,完成本次读操作,
[0020]若否,则将排他锁所属事务的writeTS移动到当前事务的读时间戳readTS的后面,即readTS.next,读取目标key上的value,完成本次读操作,
[0021]2a.2)若否,则直接读取目标key上的value,完成本次读操作,
[0022]2b)若不存在排他锁,则直接读取目标key上的value,完成本次读操作;
[0023]步骤S3、当一个针对数据项Q的写操作发生时,检查在要操作的数据项Q上是否存在排他锁,
[0024]3a)如果存在排他锁,则执行push abort操作,尝试abort对方事务,
[0025]在abort对方事务失败后进入队列等待,直到事务提交被唤醒,
[0026]在abort对方事务成功后解除当前排他锁,随后执行写操作并产生排他锁;
[0027]3b)如果不存在排他锁,则直接执行写操作并产生排他锁。
[0028]具体的,赋予事务一个读时间戳readTS和一个写时间戳writeTS之后,事务的所有读操作都在读时间戳readTS的一致性快照上进行,事务的所有写操作都在写时间戳writeTS上发生。
[0029]可选的,数据项Q包含多个数据版本。
[0030]进一步可选的,在数据项Q的多个数据版本中,选择小于等于当前事务的读时间戳readTS的最大数据版本进行读操作。
[0031]可选的,执行步骤S2,完成读操作后,更新数据项Q的读时间戳为max(r

ts(Q),readTS)。
[0032]可选的,执行步骤S3的过程中,执行写操作并产生排他锁之前,需要检查数据项Q的最大读时间戳r

ts,如果r

ts>=writeTS,那么当前事务需要将writeTS移动到r

ts的后面,即r

ts.next,再执行写操作并产生排他锁。
[0033]进一步可选的,执行步骤S3的过程中,执行写操作并产生排他锁之前,需要检查数据项Q的最大读时间戳r

ts,如果r

ts<writeTS,那么直接执行写操作并产生排他锁。
[0034]优选的,执行写操作后产生的排他锁在事务提交后解锁。
[0035]本专利技术的一种基于分布式数据库的快照隔离实现方法,与现有技术相比具有的有益效果是:
[0036](1)本专利技术可以让分布式数据库在没有写偏序的场景中获得更高的吞吐量和更低的事务延迟;
[0037](2)本专利技术通过在时间戳排序的架构上实现快照隔离,并在这种隔离级别下,实现事务的无阻塞读,在无偏序的场景下,可以使数据库的事务延迟显著降低,数据库的吞吐量
有明显的提高,同时使分布式数据库系统的SSI隔离级别的逻辑不受影响。
附图说明
[0038]附图1是本专利技术的数据项Q执行读操作的流程图;
[0039]附图2是本专利技术的数据项Q执行写操作的流程图。
具体实施方式
[0040]为使本专利技术的技术方案、解决本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于分布式数据库的快照隔离实现方法,其特征在于,该方法通过调整事务的时间戳达到解决冲突的目的,具体流程包括:步骤S1、在事务启动时,赋予事务一个读时间戳readTS和一个写时间戳writeTS;步骤S2、当一个针对数据项Q的读操作发生时,判断目标key上是否存在排他锁,2a)若存在排他锁,则继续判断排他锁是否小于等于当前事务的读时间戳readTS,2a.1)若是,那么执行push操作,检查排他锁是否处于finalized状态,若是,则解除排他锁,读取目标key上的value,完成本次读操作,若否,则将排他锁所属事务的writeTS移动到当前事务的读时间戳readTS的后面,即readTS.next,读取目标key上的value,完成本次读操作,2a.2)若否,则直接读取目标key上的value,完成本次读操作,2b)若不存在排他锁,则直接读取目标key上的value,完成本次读操作;步骤S3、当一个针对数据项Q的写操作发生时,检查在要操作的数据项Q上是否存在排他锁,3a)如果存在排他锁,则执行push abort操作,尝试abort对方事务,在abort对方事务失败后进入队列等待,直到事务提交被唤醒,在abort对方事务成功后解除当前排他锁,随后执行写操作并产生排他锁;3b)如果不存在排他锁,则直接执行写操作并产生排他锁。2.根据权利要求1所述的一种基于分布式数据库的快照隔离实现方法,其特征在于,赋予事务一个读时间戳readTS和一个写时间戳writeTS之后,事务的所有读操作都在读时间戳readTS的一致性快照上进行,事务的所有写...

【专利技术属性】
技术研发人员:张琦
申请(专利权)人:山东浪潮科学研究院有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1