System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种分布式KV的分区管理方法技术_技高网

一种分布式KV的分区管理方法技术

技术编号:40975808 阅读:2 留言:0更新日期:2024-04-18 21:23
本发明专利技术公开了一种分布式KV的分区管理方法,涉及计算机存储技术领域,包括:对所有的Key进行排序,以便后续的划分和映射操作;步骤2,部署抽样方式或哨兵方式对Key进行标识和处理,为每一小段连续范围的key分配一个唯一的range_i d;使用hash映射算法将range_i d映射到不同的分区进行存储;范围查询时,计算range_i d列表,查询对应的分区列表,并向分区所在服务器发起查询,并向相应的服务器发起查询。本发明专利技术将字符串类型的键按照范围划分,并使用哈希映射算法将范围I D映射到特定的分区I D,这样可以实现将小段连续的键均匀地散列到不同的分区中,以提高数据的均衡散列分布和访问效率。

【技术实现步骤摘要】

本申请涉及计算机存储,更具体地,涉及一种分布式kv的分区管理方法。


技术介绍

1、在大数据时代,数据的类型和格式越来越多样化,非结构化和半结构化数据的存储需求也随之增加,这些数据包括文本、图像、音频、视频等形式,不适合传统的关系型数据库的结构化存储方式,因此,应运而生一种分布式kv存储为这些数据提供了更好的支持,其可以根据数据的特点进行灵活存储和访问。

2、分布式kv存储具有灵活的数据模型、简单的访问接口和高可扩展性等优点,使其在nosql和new sql产品中得到广泛应用,它可以根据数据的特点进行自由的key值对存储,适应不同数据类型和结构的需求,同时,分布式kv存储可以通过水平扩展的方式来应对大规模数据的存储和处理需求;目前市场上存在多个分布式kv存储产品,如tikv、cassandra、tendis等。这些产品都提供了可靠的分布式存储解决方案,可以满足大规模数据存储的需求,它们通过分区的方式对数据进行管理,采用不同的分区策略,如hash分区和range分区;其中hash分区通过对key进行哈希计算,将key值对分散到不同的分区中,虽然有效避免了热点问题,但是,由于哈希计算的随机性,导致key值对在全局上无序,不适合范围查询的场景,相比之下,range分区将一段连续范围的key划分到指定的分区,提高了范围查询的效率,但是,range分区需要复杂的分区管理和分裂合并策略,容易形成热点并需要进行数据迁移或分裂操作。

3、总而言之,hash分区在范围查询和数据局部性方面存在局限性,而range分区则面临热点问题和分区管理的复杂性,这些因素可能导致某些类型的数据在分布式kv存储中无法得到良好的存储效果。

4、因此,如何完善分布式kv的分区管理方法是目前有待解决的技术问题。


技术实现思路

1、本专利技术提供一种分布式kv的分区管理方法,用以解决某些类型的数据在分布式kv存储中无法得到良好的存储效果的技术问题。

2、本专利技术提出了一种分布式kv的分区管理方法,包括:

3、步骤1,对所有的key进行排序,以便后续的划分和映射操作;

4、步骤2,部署抽样方式或哨兵方式对key进行标识和处理,为每个range分配一个唯一的range_id;

5、步骤3,使用hash映射算法将range_id映射到不同的分区进行存储;

6、步骤4,计算要查询的分区列表,并向相应的服务器发起查询。

7、优选的,所述range的key数量趋近于一次网络io的通信数量。

8、优选的,所述步骤s2中的抽样方式包括:配置抽样间隔sample_step,对字符串按固定间隔抽样,通过ascii码转换为64位数字,相同前缀的key会换算为同一个range_id值,range_id的计算方式如下:

9、for(idx=0;idx<key.length();idx+=sample_step){

10、charc=key[idx];

11、range_id+=c-‘\0’;

12、}

13、实现了把一个固定小范围的键对应到同一个range_id,完成了范围的划分。

14、优选的,所述步骤s2中的哨兵方式包括:设置一个pivot和per_range,通过计算key与pivot的差值计算range_id,key和pivot都通过ascii码转换为uint64表示的数字,也就是抽样间隔为1。换算为数字之后的key,通过与pivot比较,使得相近的key落在同一个range_id,range_id计算方式如下:

15、for(idx=0;idx<key.length();idx++){

16、charc=key[idx];

17、value+=c-‘\0’;

18、}

19、range_id=(value-pivot)/num_per_range;

20、实现了把一个固定小范围的键对应到同一个range_id,完成了范围的划分。

21、优选的,所述步骤s3中,根据范围的划分规则,计算出每个范围的range_id,使用并uint64来表示。

22、优选的,把所述uint64表示的range_id进行hash映射到partition_id,散列到不同分区,partition_id=hash(range_id)%partition_num。

23、优选的,选择固定的分区数量,使得range_id与partition_id的计算不受集群节点数量的影响。

24、优选的,存储引擎并更新partition_id与server_node之间的映射关系。

25、优选的,存储引擎为每个partition维护一个内部db实例,扩缩容过程中发生的分区迁移,以partition_id为单位执行整个逻辑db的搬迁。

26、优选的,在范围查询时根据start_key和end_key的range_id计算要查询的分区列表,并向相应的服务器发起查询,然后将返回的查询结果进行合并,以得到最终的查询结果。

27、通过应用以上技术方案,本申请的一种分布式kv的分区管理方法具有以下技术效果:

28、(1)设计了先range后hash的分区方案,提供与range分区无差别的范围查询能力。

29、(2)增加了range_id到partition_id的hash映射,使得分区管理变得简单,除特殊的扩缩容场景外,不再需要分区合并与分裂操作,节省了cpu和磁盘io消耗。

30、(3)把一次范围查询的请求并发到有限的server节点,提升并发度的同时,不扩散请求广播范围,提高了范围查询的性能。

31、(4)设计支持两种不同的range划分方式——抽样和哨兵模式,为不同的数据类型提供更适配的支持,key规则有序的可使用哨兵模式,而相对离散的适合抽样模式。

本文档来自技高网...

【技术保护点】

1.一种分布式KV的分区管理方法,其特征在于,包括:

2.如权利要求1所述的分布式KV的分区管理方法,其特征在于,所述range的key数量趋近于一次网络IO的通信数量。

3.如权利要求1所述的分布式KV的分区管理方法,其特征在于,所述步骤S2中的抽样方式包括:配置抽样间隔sample_step,对字符串按固定间隔抽样,通过ascii码转换为64位数字,相同前缀的key会换算为同一个range_id值,range_id的计算方式如下:

4.如权利要求1所述的分布式KV的分区管理方法,其特征在于,

5.如权利要求3或4所述的分布式KV的分区管理方法,其特征在于,所述步骤S3中,根据范围的划分规则,计算出每个范围的range_id,并使用uint64来表示。

6.如权利要求5所述的分布式KV的分区管理方法,其特征在于,把所述uint64表示的range_id进行hash映射到partition_id,散列到不同分区,partition_id=hash(range_id)%partition_num。

7.如权利要求1所述的分布式KV的分区管理方法,其特征在于,所述步骤3中,选择固定的分区数量,使得range_id与partition_id的计算不受集群节点数量的影响。

8.如权利要求7所述的分布式KV的分区管理方法,其特征在于,所述步骤S3中,存储引擎并更新partition_id与server_node之间的映射关系。

9.如权利要求8所述的分布式KV的分区管理方法,其特征在于,所述步骤S3中,存储引擎为每个partition维护一个内部db实例,扩缩容过程中发生的分区迁移,以partition_id为单位执行整个逻辑db的搬迁。

10.如权利要求1所述的分布式KV的分区管理方法,其特征在于,所述步骤6中,在范围查询时根据start_key和end_key的range_id计算要查询的分区列表,并向相应的服务器发起查询,然后将返回的查询结果进行合并,以得到最终的查询结果。

...

【技术特征摘要】

1.一种分布式kv的分区管理方法,其特征在于,包括:

2.如权利要求1所述的分布式kv的分区管理方法,其特征在于,所述range的key数量趋近于一次网络io的通信数量。

3.如权利要求1所述的分布式kv的分区管理方法,其特征在于,所述步骤s2中的抽样方式包括:配置抽样间隔sample_step,对字符串按固定间隔抽样,通过ascii码转换为64位数字,相同前缀的key会换算为同一个range_id值,range_id的计算方式如下:

4.如权利要求1所述的分布式kv的分区管理方法,其特征在于,

5.如权利要求3或4所述的分布式kv的分区管理方法,其特征在于,所述步骤s3中,根据范围的划分规则,计算出每个范围的range_id,并使用uint64来表示。

6.如权利要求5所述的分布式kv的分区管理方法,其特征在于,把所述uint64表示的range_id进行hash映射到partition_id,散列到不同分区,partition_...

【专利技术属性】
技术研发人员:王小威张宗全
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

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

1