一种构建Hbase二级索引表方法与流程

文档序号:20875160发布日期:2020-05-26 16:24阅读:392来源:国知局
一种构建Hbase二级索引表方法与流程

本发明涉及数据库领域,尤其涉及一种构建hbase二级索引表方法。



背景技术:

目前,业界对于hbase的二级索引已提出了多种方案。索引表在创建时只有一个分区时,会导致大量的访问集中单个region上,另外在写比较频率的场景下,随着数据增长越来越快,split次数也会增多,而split是比较耗时耗资源的。若预分区一开始就预建好了,但由于索引表主键的前缀往往是连续相同且顺序增大,这样还是会导致大量的读,写或其他操作访问集群中的一个或少数个节点,会造成某个热点region所在的单个机器超出自身承受能力,引起性能下降甚至region不可用。



技术实现要素:

本发明要解决的技术问题和提出的技术任务是对现有技术方案进行完善与改进,提供一种构建hbase二级索引表方法,以提升操作访问效率为目的。为此,本发明采取以下技术方案。

一种构建hbase二级索引表方法,包括以下步骤:

1)hbase表上给原表建立索引表;

2)对于原表的每条记录,在索引表上生成相应的索引记录,其索引记录的行键包括分区键、索引值、连接符和原表主键,所述的分区键为索引记录所在region的起始键字段,分区键作为索引表主键;

3)对分区值进行预定义;

4)建立索引表时预先确定索引分区值;

5)建立索引表时对索引表按照索引分区值进行预分区。

实现了二级索引表的建立,通过二级索引表,在写数据时,可以提升并行性能,提高访问效率。

作为优选技术手段:步骤2)中,分区键采取随机散列方式的一种分布,再结合索引表预分区。采取预分区和主键的散列设计,可以很好地解决了二级索引的数据倾斜和热点问题,在写数据的时候,能均等地命中这些预分区,更好地提升并行性能。

作为优选技术手段:步骤2)中,若原表有分区键,可以获取原表的分区键作为起始键,这样原表记录和索引记录具有相同主键前缀,则会分配到同一个regionserver上。取原表的分区键做为索引表的分区键,当通过非键值条件来访问索引表和原表时,可以减少一次rpc。

作为优选技术手段:步骤2)中,取原表行键值的哈希取模获得索引键分区值。实现原表主键哈希取值。

作为优选技术手段:步骤2)中,索引值哈希取模获得索引键分区值。实现索引值哈希取值。

作为优选技术手段:步骤2)中,所述的索引值由单个字段或者多个字段组成,多个字段之间由非打印字符连接而成。实现索引值定义结构。

作为优选技术手段:步骤3)中,采取ascii字符顺序的字符作为分区键值。可有效实现分区键取值。

作为优选技术手段:使用随机函数获取0~索引表预分区数的范围内的一个随机数为数组地址,根据地址取到相应字符做为分区键。实现散列随机方式。

作为优选技术手段:取其指定字段的哈希值再对索引表的预分区数取模的结果为数组地址,根据地址取到相应字符做为分区键。实现

原表主键哈希取值方式和索引值哈希取值方式。

有益效果:在集群中,二级索引表采取预分区和主键的散列设计,可以很好地解决了二级索引的数据倾斜和热点问题,在写数据的时候,能均等地命中这些预分区,有效提升并行性能;同时在大批量查询时,可以根据预分区数增加并发度,让每个节点提供的请求处理都是均等的,这样能更好地利用集群的资源,提高并行性,提升操作访问效率。

附图说明

图1是本发明流程示意图。

具体实施方式

以下结合说明书附图对本发明的技术方案做进一步的详细说明。

实例

如图1所示,一种构建hbase二级索引表方法,包括以下步骤:

1)hbase表上给原表建立索引表;

2)对于原表的每条记录,在索引表上生成相应的索引记录,其索引记录的行键包括分区键、索引值、连接符和原表主键,分区键为索引记录所在region的起始键字段,分区键作为索引表主键;

3)对分区值进行预定义;

4)建立索引表时预先确定索引分区值;

5)建立索引表时对索引表按照索引分区值进行预分区。

为了提升并行性能,步骤2)中,分区键采取随机散列方式的一种分布,再结合索引表预分区。采取预分区和主键的散列设计,可以很好地解决了二级索引的数据倾斜和热点问题,在写数据的时候,能均等地命中这些预分区,有效提升并行性能。

为了减少rpc调用,步骤2)中,若原表有分区键,可以获取原表的分区键作为起始键,这样原表记录和索引记录具有相同主键前缀,则会分配到同一个regionserver上。取原表的分区键做为索引表的分区键,当通过非键值条件来访问索引表和原表时,可以减少一次rpc调用。

为了实现原表主键哈希取值,步骤2)中,取原表行键值的哈希取模获得索引键分区值。实现原表主键哈希取值。

为了实现索引值哈希取值,步骤2)中,索引值哈希取模获得索引键分区值。实现索引值哈希取值。

为了实现索引值定义结构,步骤2)中,索引值由单个字段或者多个字段组成,多个字段之间由非打印字符连接而成。实现索引值定义结构。

为了实现分区键取值,步骤3)中,采取ascii字符顺序中的一个字符作为分区键值,字符按ascii码的顺序组成一个字符数组。可有效实现分区键取值。

为了实现散列随机方式,使用随机函数获取0~索引表预分区数的范围内的一个随机数为数组地址,根据地址取到相应字符做为分区键。实现散列随机方式。

为了实现原表主键哈希取值方式和索引值哈希取值方式,取其指定字段的哈希值再对索引表的预分区数取模的结果为数组地址,根据地址取到相应字符做为分区键。实现原表主键哈希取值方式和索引值哈希取值方式。

索引表存储时,将分区值,索引值,原表键值组成索引记录的行键存储到索引表中对应的region中。

在大批量范围查询频率多的场景下:索引表中的分区键一般采用取值随机,分布散列的方式,数据也能够更均匀的分散在每个region中。因此,在范围查询时,会把每个region的分区键和索引值组成行键前缀做为查询条件,通过增加并发数在每个region中并行执行请求查询获取数据。

在单点查询频率多的场景下:分区键一般采用可以由某个已知字段计算出来的。因此,在单点查询时,可以先计算(跟存储时的计算方式一致)出索引分区键,与索引值组成行键前缀做为查询条件,根据已知分区键可以快速定位到分区上查询,提高效率。

在建立索引表时,预先分配好数个region,预分区数可由用户创建时指定,并指明分割点,分割点指的是每个预分区的startkey与endkey,startkey与endkey表示这个region维护的rowkey范围,分割点取值是根据预分区数目,从起始位置开始的ascii字符。

以上图1所示的一种构建hbase二级索引表方法是本发明的具体实施例,已经体现出本发明突出的实质性特点和显著进步,可根据实际的使用需要,在本发明的启示下,对其进行形状、结构等方面的等同修改,均在本方案的保护范围之列。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1