一种跨区域快速读写的方法、装置及介质制造方法及图纸

技术编号:33245967 阅读:13 留言:0更新日期:2022-04-27 17:57
本发明专利技术涉及分布式数据库领域,具体提供了一种跨区域快速读写的方法,具有如下步骤:S1、定义支撑地区亲和的SQL语法;S2、通过隐式分区前缀区分不同区域数据;S3、使用隐式分区强制唯一性;S4、本地优化搜索。与现有技术相比,本发明专利技术通过简易的SQL语法建立具备区域亲和的表,不用改变用户的应用,也不用进行分库分表。使分布式数据库在跨区域部署场景下,可以实现数据就近读写,降低访问延迟。支持增加强制全局唯一性检查,保持全局UNIQUE约束的完整性。保持全局UNIQUE约束的完整性。保持全局UNIQUE约束的完整性。

【技术实现步骤摘要】
一种跨区域快速读写的方法、装置及介质


[0001]本专利技术涉及分布式数据库领域,具体提供一种跨区域快速读写的方法、装置及介质。

技术介绍

[0002]CockroachDB是一个可扩展、多版本,全球分布式并支持同步复制的数据库。它底层采用键值KV存储引擎,并把数据按照一定格式拆分成不同分片,每个分片被复制多份分到不同的节点上。一行数据后根据表的主键(Primary Key)进行编码,形成KV存储里的Key,使用行里其他内容形成KV存储里的Value,然后按照Key进行排序存储。其主键Key编码形式为:/Table/<id>/<index>/<pk val>/<family>,由表的唯一编号和主键值等组成。
[0003]假设当一家北京公司计划将业务拓展到上海和成都,如果数据库只部署在北京,那上海和成都的用户在读写北京的数据库是都会遇到较高的访问延迟,用户体验较差。如果在三地部署分布式数据库服务,由于数据库的分片策略,会将表数据发往不同区域,用户读写时还是无法避免访问不同区域的数据。对于分布式数据库来说,虽然可以通过增加表示区域的表字段,并通过PARTITION BY LIST语法来设置路由分片规则。但这样需要修改表结构,更改用户的应用。如果通过分库分表的方式来实现,在应用层将很难协调跨分片事务、保持一致性和处理故障。

技术实现思路

[0004]本专利技术是针对上述现有技术的不足,提供一种实用性强的跨区域快速读写的方法。
[0005]本专利技术进一步的技术任务是提供一种设计合理,安全适用的跨区域快速读写的装置。
[0006]本专利技术进一步的技术任务是提供一种计算机可读介质。
[0007]本专利技术解决其技术问题所采用的技术方案是:
[0008]一种跨区域快速读写的方法,具有如下步骤:
[0009]S1、定义支撑地区亲和的SQL语法;
[0010]S2、通过隐式分区前缀区分不同区域数据;
[0011]S3、使用隐式分区强制唯一性;
[0012]S4、本地优化搜索。
[0013]进一步的,在步骤S1中通过REGION BY ROW关键字明确需要自动开启地区亲和的表。
[0014]进一步的,在步骤S2中,所述隐式分区是指每一行数据仍由某些列进行分区,分区是对用户进行隐藏的,开发人员仍按普通列进行分区,只是实现上不再使用普通分区列作为严格前缀,而是将隐式分区列存储为每个键的前缀。
[0015]进一步的,对于REGION BY ROW的表,添加隐式分区列row_region,用于指定行的
归属位置,不同区域的数据主键,使用编码存储,所述主键的唯一性取决于列id,数据库内核对于表的重新编码对用户不可见,REGION BY ROW表在使用形式上和单机数据库上的表一致,同样表上定义的索引也要使用row_region前缀进行隐式分区,按照不同的地区前缀,将主键和索引数据放置到对应地区的节点上。
[0016]进一步的,在步骤S3中,插入优化器检查username,将在变更后作为事务的一部分立即执行。
[0017]进一步的,所述优化器会增加一个一致性检查的查询请求constraint

check来检查username,将会在insert后作为事务的一部分立即执行,如果constraint

check检查返回有结果集,表示别的分区已经有该行,会返回失败使事务结束,同时insert操作也会回滚。
[0018]进一步的,在步骤S4中,当用户的查询只返回唯一的行,所述行所在区域为止时,本地优化搜索进行优化,利用唯一性首先搜索本地区域中的行,如果找到该行,则无需扇出到远程其他区域。
[0019]进一步的,本地优化搜索由优化器规划为一个有限的UNION ALL,其中UNION ALL的左侧执行树扫描本地节点,右侧扫描远程节点;
[0020]如果左侧达到限制,则UNION ALL将短路并避免执行右侧执行树。
[0021]一种跨区域快速读写的装置,其特征在于,包括:至少一个存储器和至少一个处理器;
[0022]所述至少一个存储器,用于存储机器可读程序;
[0023]所述至少一个处理器,用于调用所述机器可读程序,执行一种跨区域快速读写的方法。
[0024]一种计算机可读介质,其特征在于,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行一种跨区域快速读写的方法。
[0025]本专利技术的一种跨区域快速读写的方法、装置及介质和现有技术相比,具有以下突出的有益效果:
[0026]本专利技术支持通过简易的SQL语法建立具备区域亲和的表,不用改变用户的应用,也不用进行分库分表。使分布式数据库在跨区域部署场景下,可以实现数据就近读写,降低访问延迟。支持增加强制全局唯一性检查,保持全局UNIQUE约束的完整性。
附图说明
[0027]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0028]附图1是一种跨区域快速读写的方法中隐式分区表结构示意图;
[0029]附图2是一种跨区域快速读写的方法中区域分区表的一致性检查执行计划示意图。
具体实施方式
[0030]为了使本
的人员更好的理解本专利技术的方案,下面结合具体的实施方式对本专利技术作进一步的详细说明。显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本专利技术保护的范围。
[0031]下面给出一个最佳实施例:
[0032]本实施例中的一种跨区域快速读写的方法,具有如下步骤:
[0033]S1、定义支撑地区亲和的SQL语法;
[0034]SQL语法可使用CREATE TABLE customers(id UUID PRIMARY KEY DEFAULT gen_random_uuid()或username STRING NOT NULL UNIQUE)REGION BY ROW。通过REGION BY ROW关键字明确需要自动开启地区亲和的表。
[0035]S2、通过隐式分区前缀区分不同区域数据;
[0036]隐式分区是指每一行数据仍由某些列进行分区,但分区是对用户隐藏的。允许开发人员按任何列进行分区,而不要求该列是该列的严格前缀。在下面,我们仍然将其存储为每个键的前缀。对于定义过REGION BY ROW的表,我们自动给该表增加隐式分区列row_region,它用于指定行的归属位置,可本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种跨区域快速读写的方法,其特征在于,具有如下步骤:S1、定义支撑地区亲和的SQL语法;S2、通过隐式分区前缀区分不同区域数据;S3、使用隐式分区强制唯一性;S4、本地优化搜索。2.根据权利要求1所述的一种跨区域快速读写的方法,其特征在于,在步骤S1中通过REGION BY ROW关键字明确需要自动开启地区亲和的表。3.根据权利要求2所述的一种跨区域快速读写的方法,其特征在于,在步骤S2中,所述隐式分区是指每一行数据仍由某些列进行分区,分区是对用户进行隐藏的,开发人员仍按普通列进行分区,只是实现上不再使用普通分区列作为严格前缀,而是将隐式分区列存储为每个键的前缀。4.根据权利要求3所述的一种跨区域快速读写的方法,其特征在于,对于REGION BY ROW的表,添加隐式分区列row_region,用于指定行的归属位置,不同区域的数据主键,使用编码存储,所述主键的唯一性取决于列id,数据库内核对于表的重新编码对用户不可见,REGION BY ROW表在使用形式上和单机数据库上的表一致,同样表上定义的索引也要使用row_region前缀进行隐式分区,按照不同的地区前缀,将主键和索引数据放置到对应地区的节点上。5.根据权利要求4所述的一种跨区域快速读写的方法,其特征在于,在步骤S3中,插入优化器检查username,将在变更后作为事务的一部分立即执行。6.根据权利要求5所述的一种跨区域...

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

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

1