System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于分布式数据库的事务处理领域,涉及一种无协调确定性的分布式事务原子性保证方法。
技术介绍
1、早期的数据库系统大多是单机系统,无法有效处理大规模数据和高并发访问。但是随着互联网和大数据时代的到来,传统的单机数据库面临着越来越多的挑战,包括性能、扩展性和容错性等方面的限制。所以分布式分片架构数据库应运而生,通过将数据分片存储到不同的节点上,并且将请求路由到相应的节点上进行处理,来实现数据的水平扩展和分布式处理。这种架构可以大大提高数据库的性能、扩展性和容错性,能够应对海量数据和高并发访问的挑战。同时,分布式分片架构数据库也提供了更好的负载均衡和数据安全性,通过数据备份和容错机制来保证数据的可靠性和持久性。常见的分布式分片架构数据库包括google的spanner、facebook的myrocks、linkedin的vitess等,它们都是针对大规模分布式系统设计的数据库系统,具有高性能、高可扩展性和高可用性的特点。
2、在数据分片的架构下,数据库的存储能力得以横向扩展,随之如何保证分布式事务的acid特性成了最重要的问题。由于事务被拆分为不相交的子事务发送至不同的节点,各个节点之间只能通过网络的方式进行通信。传统2pc的方案是使得一个节点来充当协调者,其余事务参与所涉及的节点作为参与者,由协调者通知参与者的方式来使得子事务的执行“整齐一致”。协调者时刻监督事务的整个执行过程,每当一个参与者的子事务执行不成功便通知所有其他参与者一并中止,在此过程中存在着协调者单点瓶颈的问题。
3、geogauss
4、可以注意到,geogauss具有独特的确定性事务处理机制,在多主架构下也无需额外的协调者角色,然而其缺陷在于没有支持数据分片,在单个数据中心内完全不具备横向扩展能力,同时其事务批处理的特点也使得其无法直接套用传统的2pc的方案。因此亟需一种创新的,契合其无协调特点的分布式事务原子性维护方案。
技术实现思路
1、针对现有技术的不足,本专利技术提供一种无协调确定性的分布式事务原子性保证方法,创新地设计了一种了无需协调者的方式,来解决分布式数据分片架构下事务的原子性保证问题。
2、一种无协调确定性的分布式事务原子性保证方法,包括如下步骤:
3、步骤1:根据工作负载设定epoch的大小;
4、步骤2:按照设定epoch的大小从客户端接收事务,将事务划分为若干子事务并确定对每个子事务负责的分片节点;
5、具体步骤包括:
6、步骤2.1:客户端发送事务至任意一个分片节点,分片节点判断当前epoch的大小是否超过步骤1中设定的epoch的大小,若未超过,分片节点不断从客户端接收事务,为每个事务添加事务id并暂时保存在本地缓冲区,若当前epoch已经超过步骤1中所设定的大小,则本次epoch事务收集完成,开启下一个epoch并将接收到的事务置于下一个epoch的缓冲区;
7、所述事务id的生成方法为:
8、
9、其中,f(ts,id)为事务id,ts是当前时间戳,id是当前分片节点的节点id,m是集群中的分片节点数量;
10、步骤2.2:将epoch期间的每个事务划分为互不相交的子事务,并确定对子事务负责的分片节点,将每个事务拆分成本地执行的子事务和发往其余分片节点的子事务;
11、所述确定对子事务负责的分片节点的方法为:遍历每个事务的所有语句,针对每一条语句的键值key,使用如下的哈希函数来计算对每个子事务负责的分片节点:
12、
13、其中,f(s)为哈希函数,s为语句的键值key,s[i]为键值key中第i个字符,i为字符的编号;b代表键值key中字符值的最大ascii码,l为键值key的长度;bl-i代表b进制下的第l-i个数位;mod为取模操作符;
14、步骤3:将步骤2得到的子事务依据其负责的分片节点分类为不同的子事务集合,并打包成消息发送至负责的分片节点,若存在某个分片节点没有将要在其上执行的子事务,则发送一条空消息;
15、步骤4:所有分片节点接收到消息后遍历消息中的子事务,为每个子事务添加事务的开始epoch号;所述事务的开始epoch号表示该子事务被分片节点接收到后准备开始执行时系统当前的epoch号;
16、步骤5:将每个添加事务的开始epoch号后的子事务交由本地执行线程,以乐观并发控制的方式执行,在执行完成后,为每个子事务添加事务的提交epoch号和事务的提交序列号,所述事务的提交epoch号为事务在执行完成后准备提交时系统当前的epoch号,所述事务的提交序列号为按当前时间戳生成的唯一序列号;所述事务的提交序列号的生成方法与事务id的生成方法一致;
17、所述乐观并发控制的方式为:对于子事务的读操作,直接读取本地最新快照的数据;对于子事务的写操作,将所要写的键值对key-value pair缓存在本地,称为写集;
18、步骤6:对添加事务的提交epoch号和事务的提交序列号后的子事务进行合并;
19、所述合并的规则为:首先新建一块缓冲区称为写操作缓冲区,遍历每个子事务在步骤5中执行写操作而缓存的写集,在写操作缓冲区检查key对应的事务的开始epoch号、事务的提交epoch号和事务的提交序列号,如果事务提交epoch号小于当前事务的提交epoch号,则将key对应的当前事务的开始epoch号、提交epoch号和提交序列号及对应的值value写入到写操作缓冲区;否则,说明在当前epoch中已经有事务写入过,则根据以下判断执行:如果当前事务的开始epoch号更小,则当前事务覆盖先前的写入,如果相等,则进一步判断当前事务的提交序列号和先前事务的提交序列号大小,采用先写胜利的原则,让事务的提交序列号更小的事务保持其写入;
20、步骤7:各个分片节点扫描所有本地的子事务集合,对子事务进行验证,将验证通过的子事务放入本地的子事务提交集合,将验证失败的子事务作为中止的子事务,将中止的子事务的事务id打包为中止事务集合消息并广播至所有其余分片节点;
21、所述验证的规则为:对每个子事务,遍历其缓存的所有写集,对于每个写集,检查通过步骤6产生的写本文档来自技高网...
【技术保护点】
1.一种无协调确定性的分布式事务原子性保证方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤2具体包括:
3.根据权利要求1所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤4中所述事务的开始epoch号,表示该子事务被分片节点接收到后准备开始执行时系统当前的epoch号。
4.根据权利要求2所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤5中所述事务的提交epoch号为事务在执行完成后准备提交时系统当前的epoch号,所述事务的提交序列号为按当前时间戳生成的唯一序列号;所述事务的提交序列号的生成方法与事务ID的生成方法一致。
5.根据权利要求4所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤5中所述乐观并发控制的方式为:对于子事务的读操作,直接读取本地最新快照的数据;对于子事务的写操作,将所要写的键值对Key-Value Pair缓存在本地,称为写集。
6.根据权利要求5所述的一种无协调确定性的分布式
7.根据权利要求6所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤7中所述验证的规则为:对每个子事务,遍历其缓存的所有写集,对于每个写集,检查通过步骤6产生的写操作缓冲区中的key所对应的事务的开始epoch号、事务的提交epoch号和事务的提交序列号是否和该子事务的开始epoch号、提交epoch号和提交序列号均相同,若相同表示该写集通过了检查,若子事务的所有写集均通过了检查,表示该子事务所有写操作均完成,则通过验证,否则表示该子事务存在执行失败的写操作,将被中止,验证失败。
...【技术特征摘要】
1.一种无协调确定性的分布式事务原子性保证方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤2具体包括:
3.根据权利要求1所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤4中所述事务的开始epoch号,表示该子事务被分片节点接收到后准备开始执行时系统当前的epoch号。
4.根据权利要求2所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤5中所述事务的提交epoch号为事务在执行完成后准备提交时系统当前的epoch号,所述事务的提交序列号为按当前时间戳生成的唯一序列号;所述事务的提交序列号的生成方法与事务id的生成方法一致。
5.根据权利要求4所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤5中所述乐观并发控制的方式为:对于子事务的读操作,直接读取本地最新快照的数据;对于子事务的写操作,将所要写的键值对key-value pair缓存在本地,称为写集。
6.根据权利要求5所述的一种无协调确定性的分布式事务原子性保证方法,其特征在于,步骤6中所述合并的规则为:首先新建一块缓冲区称为写操作缓冲区...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。