CN111737267B - 基于HBase的索引系统及查询加速方法 - Google Patents

基于HBase的索引系统及查询加速方法 Download PDF

Info

Publication number
CN111737267B
CN111737267B CN202010765009.7A CN202010765009A CN111737267B CN 111737267 B CN111737267 B CN 111737267B CN 202010765009 A CN202010765009 A CN 202010765009A CN 111737267 B CN111737267 B CN 111737267B
Authority
CN
China
Prior art keywords
index
data
column
hbase
row key
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010765009.7A
Other languages
English (en)
Other versions
CN111737267A (zh
Inventor
赵欣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Yingshisheng Information Technology Co Ltd
Original Assignee
Shenzhen Yingshisheng Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Yingshisheng Information Technology Co Ltd filed Critical Shenzhen Yingshisheng Information Technology Co Ltd
Priority to CN202010765009.7A priority Critical patent/CN111737267B/zh
Publication of CN111737267A publication Critical patent/CN111737267A/zh
Application granted granted Critical
Publication of CN111737267B publication Critical patent/CN111737267B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Abstract

基于HBase的索引系统及查询加速方法,通过利用HBase行键的有序性,在HBase表中内置索引数据列族以对业务数据列族下的一个业务数据列建立索引列,并将所述索引列对应的所述HBase表的行键列下写入索引列行键值,所述索引列行键值包括被索引的业务数据列列值和位于所述业务数据列列值之后的业务数据列行键值,并以内置索引数据列族的HBase表为核心构建本发明,能够对HBase表中的数据资源在复杂查询条件下达到更加快速查找的目的,从而有利于更加充分利用和开发HBase的数据资源。

Description

基于HBase的索引系统及查询加速方法
技术领域
本发明涉及HBase数据库技术,特别是一种基于HBase的索引系统及查询加速方法。
背景技术
Apache HBase是一个高可靠、高性能、面向列、可伸缩的、开源的非关系型分布式数据库(简称HBase数据库或HBase),主要用来存储非结构化和半结构化的松散数据,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表。HBase本身提供基于全表扫描的查询,同时也提供基于行键(类似于关系数据库中表的主键)的查询。但在实际应用场景中,数据的查询条件往往是比较复杂的,对于复杂查询条件的处理,在HBase中只能通过全表扫描的方式来对数据进行检索,即对表中的全部数据进行逐行比对和过滤,随着数据量的增加,对数据查询检索的代价会越来越大,无法满足正常的数据检索需求。为了利用或开发HBase的数据资源,现有技术中出现了基于MapReduce批处理方式的HBase二级索引,借助第三方Solr引擎预先创建的HBase二级索引,这两种HBase二级索引实际上是将二级索引表建立在HBase数据库以外,属于库外建表的方式。现有技术中还有基于协处理器方式在HBase数据库中针对HBase表另行建立二级索引表,也就是一种在同一个HBase数据库中采用表外建表的方式,以实现对HBase表中数据的快速查找。本发明人认识到,虽然上述HBase二级索引都是对HBase表原有全表扫描的方式,所带来的大量磁盘I/O操作和查询等待时间过长问题的改进,但都存在一些缺陷或不足,例如,基于MapReduce批处理方式的HBase二级索引不能够实时构建索引,实效性不高;例如,第三方Solr引擎预先创建的HBase二级索引需要依赖第三方引擎,耦合性太强,资源需求太多;例如,在同一个HBase数据库中采用表(HBase表,如用户表等)外建表(针对用户表的二级索引表)的方式可能造成数据表和索引表物理分离,而索引表和数据表的分离可能导致数据的一致性存在问题等,同时也不利于索引反查。HBase行键的有序性是HBase提供基于行键查询的基础,但是现有技术中的HBase表所对应的HBase行键本身不包括业务数据,即不包括表中列族下某一列的列值(业务数据),而HBase中除行键外的其他列的数据是无序的,也就是说现有HBase表本身不能提供任何针对业务数据列的索引检索。本发明人认为,如果利用HBase行键的有序性,在HBase表中内置索引数据列族以对业务数据列族下的一个业务数据列建立索引列,并将所述索引列对应的所述HBase表的行键列下写入索引列行键值,所述索引列行键值包括被索引的业务数据列列值和位于所述业务数据列列值之后的业务数据列行键值,并以内置索引数据列族的HBase表为核心构建基于HBase的索引系统及查询加速方法,则能够对HBase表中的数据资源在复杂查询条件下达到更加快速查找的目的,有利于更加充分利用和开发HBase的数据资源。有鉴于此,本发明人完成了本发明。
发明内容
本发明针对现有技术中存在的缺陷或不足,提供一种基于HBase的索引系统及查询加速方法,通过利用HBase行键的有序性,在HBase表中内置索引数据列族以对业务数据列族下的一个业务数据列建立索引列,并将所述索引列对应的所述HBase表的行键列下写入索引列行键值,所述索引列行键值包括被索引的业务数据列列值和位于所述业务数据列列值之后的业务数据列行键值,并以内置索引数据列族的HBase表为核心构建本发明,能够对HBase表中的数据资源在复杂查询条件下达到更加快速查找的目的,从而有利于更加充分利用和开发HBase的数据资源。
本发明的技术方案如下:
基于HBase的索引系统,包括HBase服务端和与所述HBase服务端相适配的客户端程序,其特征在于,所述HBase服务端包括与HBase表分别互连的索引元信息装置、数据读取模块、数据写入模块、索引构建模块和表管理模块,所述数据读取模块连接所述客户端程序以进行数据读取,所述数据写入模块连接所述客户端程序以进行数据写入,所述索引构建模块连接所述客户端程序以构建索引,所述表管理模块连接所述客户端程序以进行表的创建和管理;所述HBase表包括业务数据列族和为所述业务数据列族下的一个业务数据列建立索引的索引数据列族,所述索引数据列族下设置有索引列,所述索引列对应的所述HBase表的行键列下写入索引列行键值,所述索引列行键值包括被索引的业务数据列列值及其业务数据列行键值,所述业务数据列行键值位于所述业务数据列列值之后。
所述数据写入模块和所述索引构建模块可以用于构建普通索引、唯一索引、函数索引、覆盖索引和/或复合索引;所述数据读取模块可以利用已构建的普通索引、唯一索引、函数索引、覆盖索引和/或复合索引加速数据读取。
所述数据写入模块和所述数据读取模块均利用HBase的协处理器机制对所述HBase表的数据读写操作进行拦截,所述数据写入模块针对被拦截到的写请求内容根据所述索引元信息装置中的索引元信息自动启动在所述HBase表内构建索引的数据写入流程,所述数据读取模块针对被拦截到的读请求内容根据所述索引元信息装置中的索引元信息自动启动利用所述索引列行键值有序性在所述HBase表内对被索引业务数据列进行查询的数据读取流程。
所述索引列行键值均包括一个相同的前缀,所述前缀使得全部索引列行键值自动聚合成所述HBase表内的索引数据区以从排序上与由业务数据列行键值形成的业务数据区始终保持有分隔线。
在所述HBase表内所述索引数据区位于所述业务数据区的上方,所述索引列行键值中的所述业务数据列行键值用于索引检索后的回表检索。
所述HBase服务端包括HBase表拆分模块,所述HBase表拆分模块在拆分过程中屏蔽索引数据对拆分过程的影响,使索引数据区不参与拆分点计算,使处于同一个表分区中的业务数据区和索引数据区在依据业务数据列行键值拆分点拆分成上半区和下半区时始终按照实际的业务数据来拆分,所述索引数据区随所述业务数据区的拆分而拆分,将索引数据列行键值中所包含的业务数据列行键值小于拆分点的归属于上半区,不修改键值;将索引数据列行键值中所包含的业务数据列行键值等于或大于拆分点的归属于下半区,并修改键值。
一种内置索引列族的HBase表,其特征在于,在同一个HBase表内包括业务数据列族和为所述业务数据列族下的一个业务数据列建立索引的索引数据列族,所述索引数据列族下设置有索引列,所述索引列对应的所述HBase表的行键列下写入索引列行键值,所述索引列行键值包括被索引的业务数据列列值及其业务数据列行键值,所述业务数据列行键值位于所述业务数据列列值之后,所述索引列行键值均包括一个相同的前缀,所述前缀使得全部索引列行键值自动聚合成所述HBase表内的索引数据区以从排序上与由业务数据列行键值形成的业务数据区始终保持有分隔线,在所述HBase表内所述索引数据区位于所述业务数据区的上方,所述索引列行键值中的所述业务数据列行键值用于索引检索后的回表检索。
一种内置索引列族的HBase表构建方法,其特征在于,包括HBase服务端和与所述HBase服务端相适配的客户端程序,在所述客户端程序对所述HBase服务端中HBase表的写请求路径上设置有第一协处理器,所述第一协处理器拦截到写请求后根据索引元信息自动启动在所述HBase表内构建索引的数据写入流程,自动构建索引数据列族及其位于HBase表行键列下的索引列行键值,所述索引列行键值包括被索引的业务数据列列值及其业务数据列行键值,所述业务数据列行键值位于所述业务数据列列值之后,所述索引列行键值均包括一个相同的前缀,所述前缀使得全部索引列行键值自动聚合成所述HBase表内的索引数据区以从排序上与由业务数据列行键值形成的业务数据区始终保持有分隔线,在所述HBase表内所述索引数据区位于所述业务数据区的上方,所述索引列行键值中的所述业务数据列行键值用于索引检索后的回表检索。
所述数据写入流程包括以下步骤:步骤1,客户端操作者从客户端向HBase表数据列族中的某一业务数据列写入业务数据;步骤2,第一协处理器拦截所述写入业务数据的请求;步骤3,所述第一协处理器从HBase中的索引元信息装置中获取索引元信息;步骤4,所述第一协处理器根据所述索引元信息判断所述业务数据列是否已经建立索引数据列族,如果否,则进入步骤7,如果是,则进入步骤5;步骤5,索引构建模块根据所述业务数据构建索引数据,所述索引数据的结构包括前缀+所述业务数据+所述业务数据作为被索引业务数据列中的列值所对应的HBase表行键列下的业务数据列行键值;步骤6,数据写入模块将所述索引数据作为索引数据列行键值写入所述HBase表行键列下,所述索引数据列族下索引数据列的列值均为空项或者为业务数据列族中另一附带业务数据列的列值;步骤7,数据写入模块将所述业务数据写入到HBase表数据列族中对应的业务数据列中;步骤8,这次数据写入操作完成。
一种HBase的查询加速方法,其特征在于,包括HBase服务端和与所述HBase服务端相适配的客户端程序,在所述客户端程序对所述HBase服务端中HBase表的读请求路径上设置有第二协处理器,所述HBase服务端包括上述内置索引列族的HBase表,所述第二协处理器拦截到读请求内容后根据索引元信息自动启动利用索引列行键值有序性在所述HBase表内对被索引业务数据列进行查询的数据读取流程。
所述数据读取流程包括以下步骤:步骤1,客户端操作者从客户端向HBase表发起业务数据查询读取请求;步骤2,第二协处理器拦截所述业务数据查询请求;步骤3,所述第二协处理器从HBase中的索引元信息装置中获取索引元信息;步骤4,所述第二协处理器根据所述索引元信息判断所述业务数据查询请求的查询条件中是否包含了已经建立索引数据的业务数据列,如果否,则按照原有方式对业务数据列族进行检索后向客户端返回查询结果,如果是,则进入步骤5;步骤5,数据读取模块根据索引构建情况生成最优索引检索方案从HBase表行键列下的索引数据列行键值中获得索引查询结果;步骤6,所述数据读取模块判断是否需要回表查询,如果否,则向客户端返回查询结果,如果是,则进入步骤7;步骤7,所述数据读取模块从索引数据列行键值中获取业务数据列行键值,并根据业务数据列行键值回表查询出结果后向客户端返回查询结果。
一种内置索引列族的HBase表拆分方法,其特征在于,所述HBase服务端包括HBase表拆分模块和上述权利要求6所述的内置索引列族的HBase表,所述HBase表拆分模块在拆分过程中屏蔽索引数据对拆分过程的影响,使索引数据区不参与拆分点计算,使处于同一个表分区中的业务数据区和索引数据区在依据业务数据列行键值拆分点拆分成上半区和下半区时始终按照实际的业务数据来拆分,所述索引数据区随所述业务数据区的拆分而拆分,将索引数据列行键值中所包含的业务数据列行键值小于拆分点的归属于上半区,不修改键值;将索引数据列行键值中所包含的业务数据列行键值等于或大于拆分点的归属于下半区,并修改键值。
本发明的技术效果如下:本发明基于HBase的索引系统及查询加速方法,通过以内置索引数据列族的HBase表为核心构建的技术解决方案,均能够对HBase中表的任意列建立索引,并能够在数据查询检索过程中自动利用已建立的索引对数据进行快速定位和检索,从而达到加速查询的目的。因为在HBase中行键是始终有序的,有序数据的查找定位的效率要远好于无序数据的全部遍历(全表扫描),故利用索引可以达到加速查询的目标。
本发明能够支持普通索引、唯一索引、函数索引、覆盖索引和/或复合索引。本发明能够在HBase中实现高效率的数据查询检索,索引相关的处理对客户端程序是无感知的,客户端使用HBase本身的查询方式即可,在不更改客户端程序的前提下即能实现数据查询的加速,通过对多种索引类型的支持,满足现实中复杂查询条件的数据查询需求,并且通过对表拆分的改进,在大数据量的情况下,仍能保持高效的数据查询。本发明一种内置索引列族的HBase表拆分方法,将同一个表分区中的HBase表拆分成上半区和下半区后,业务数据与索引数据始终是一一对应的,不会出现跨区的情况。这样处理的优势在于:当利用索引进行数据查询时,回表的过程不需要进行跨区检索,进一步提高了查询的效率。
附图说明
图1是实施本发明基于HBase的索引系统结构示意图。
图2是图1中读写请求的拦截系统结构示意图。
图3是图1或图2中涉及的数据写入流程示意图。
图4是图1或图2中涉及的数据读取流程示意图。
图5是针对图1或图2中HBase表例举的人员信息HBase表的示意图。
图6是针对图5中的人员信息HBase表进行回表查询的示意图。
图7是对具有姓名索引并附带性别的人员信息HBase表进行覆盖索引查询的示意图。
图8是针对图5中的人员信息HBase表进行拆分的初始状态示意图。
图9是图8中的人员信息HBase表进行拆分后业务数据列族被拆分为上半区和下半区的状态示意图。
图10是在图9后图8中索引数据列族被拆分为上半区和下半区的状态示意图。
图11是经过图9和图10拆分后的人员信息HBase表状态示意图。
具体实施方式
下面结合附图(图1-图11)对本发明进行说明。
图1是实施本发明基于HBase的索引系统结构示意图。图1中包括HBase中的HBase表,以及与所述HBase表分别互连的索引元信息装置、数据读取模块、数据写入模块、索引构建模块和表管理模块,所述数据读取模块连接客户端程序以进行数据读取,所述数据写入模块连接客户端程序以进行数据写入,所述索引构建模块连接客户端程序以构建索引,所述表管理模块连接客户端程序以进行表的创建和管理,所述HBase能够进行表拆分。图1中的表即HBase表。图2是图1中读写请求的拦截系统结构示意图。图2中包括客户端程序和HBase表,在所述客户端程序对所述HBase表的写请求路径上设置有第一协处理器(利用协处理器机制处理写请求),在所述客户端程序对所述HBase表的读请求路径上设置有第二协处理器(利用协处理器机制处理读请求)。所述第一协处理器拦截到写请求后根据索引元信息自动构建索引数据列族及其位于HBase表行键列下的索引列行键值。所述第二协处理器拦截到读请求后根据索引元信息利用已经构建的索引系统生成最优的查询逻辑并执行查询,使得针对HBase表中的业务数据能够被快速定位和查询加速。图3是图1或图2中涉及的数据写入流程示意图。图3中包括以下步骤:步骤1,客户端操作者从客户端向HBase表数据列族中的某一业务数据列写入业务数据;步骤2,第一协处理器拦截所述写入业务数据的请求;步骤3,所述第一协处理器从HBase中的索引元信息装置中获取索引元信息;步骤4,所述第一协处理器根据所述索引元信息判断所述业务数据列是否已经建立索引数据列族,如果否,则进入步骤7,如果是,则进入步骤5;步骤5,索引构建模块根据所述业务数据构建索引数据,所述索引数据的结构包括前缀+所述业务数据+所述业务数据作为被索引业务数据列中的列值所对应的HBase表行键列下的业务数据列行键值;步骤6,数据写入模块将所述索引数据作为索引数据列行键值写入所述HBase表行键列下,所述索引数据列族(INDEX列族)下索引数据列的列值均为空项或者为业务数据列族中另一附带业务数据列的列值;步骤7,数据写入模块将所述业务数据写入到HBase表数据列族(DATA列族)中对应的业务数据列中;步骤8,这次数据写入操作完成。图4是图1或图2中涉及的数据读取流程示意图。图4中包括以下步骤:步骤1,客户端操作者从客户端向HBase表发起业务数据查询(读取)请求;步骤2,第二协处理器拦截所述业务数据查询请求;步骤3,所述第二协处理器从HBase中的索引元信息装置中获取索引元信息;步骤4,所述第二协处理器根据所述索引元信息判断所述业务数据查询请求的查询条件中是否包含了已经建立索引数据的业务数据列,如果否,则按照原有方式对业务数据列族(DATA列族)进行检索后向客户端返回查询结果,如果是,则进入步骤5;步骤5,数据读取模块根据索引构建情况生成最优索引检索方案从HBase表行键列下的索引数据列行键值中获得索引查询结果;步骤6,所述数据读取模块判断是否需要回表查询,如果否,则向客户端返回查询结果,如果是,则进入步骤7;步骤7,所述数据读取模块从索引数据列行键值中获取业务数据列行键值,并根据业务数据列行键值回表查询出结果后向客户端返回查询结果。图5是针对图1或图2中HBase表例举的人员信息HBase表的示意图。图5中人员信息HBase表包括行键(HBase表行键列)和两个列族,其一为业务数据列族(列族DATA),其二为索引数据列族。所述业务数据列族下包括4个列,分别为姓名(列),性别(列),民族(列),住址(列)。所述索引数据列族下包括1个列,即民族索引(列)。人员信息HBase表的列值部分分为两个区,其一为索引区(索引数据区),其二为数据区(业务数据区)。索引数据区所对应的HBase表行键列下的行键值(索引数据列行键值)依次分别为0+汉+110…;0+汉+130…;0+满+410…;0+藏+220…。索引数据区所对应的业务数据列族下区域无数据,索引数据区所对应的民族索引列下各列值均为空。业务数据区所对应的HBase表行键列下的行键值(业务数据列行键值,均为身份证号码)依次分别为110…;130…;220…;410…。业务数据区所对应的业务数据列族姓名列分别为张三,李四,王五,赵六;性别列分别为男,女,男,男;民族列分别为汉,汉,藏,满;地址列分别为北京…,河北…,吉林…,湖北…。业务数据区所对应的索引数据列族民族索引列下区域无数据。图6是针对图5中的人员信息HBase表进行回表查询的示意图。图6中回表查询包括根据民族快速定位身份证号,例如查汉族人,在索引数据列行键值中找到身份证号110…和130…,再根据110…和130…这两个业务数据列行键值从业务数据列族下各个业务数据列中获得以下查询结果110…对应的张三/男/汉/北京…,以及130…对应的李四/女/汉/河北…(根据身份证号快速定位人员信息),然后返回上述查询结果(110…/张三/男/汉/北京…;130…/李四/女/汉/河北…)。图7是对具有姓名索引并附带性别的人员信息HBase表进行覆盖索引查询的示意图。图7中业务数据区所对应的HBase表行键列下的行键值(业务数据列行键值,均为身份证号码)依次分别为110…;130…;220…;410…。业务数据区所对应的业务数据列族姓名列分别为张三,李四,王五,赵六;性别列分别为男,女,男,男;民族列分别为汉,汉,藏,满;地址列分别为北京…,河北…,吉林…,湖北…。索引数据区所对应的HBase表行键列下的行键值(索引数据列行键值)依次分别为0+李四+130…;0+王五+220…;0+张三+110…;0+赵六+410…。索引数据区所对应的索引数据列族姓名索引附带性别列下的列值依次分别为女,男,男,男。根据姓名快速定位,例如查询姓名为张三的人员姓名及其性别(不需要住址等信息),只需要在HBase表行键列下的索引数据列行键值中和索引数据列族姓名索引附带性别列下的列值中获得“张三/男”的查询结果,然后返回这一查询结果(张三/男)。图8是针对图5中的人员信息HBase表进行拆分的初始状态示意图。图8中索引数据区不参与拆分点计算,即在HBase表行键列下的索引数据列行键值不参与拆分点计算,也就是说屏蔽索引数据对拆分过程的影响,虽然业务数据和索引数据在同一个表分区中,但是当需要拆分时,拆分过程始终是按照实际的业务数据来拆分的。图9是图8中的人员信息HBase表进行拆分后业务数据列族被拆分为上半区和下半区的状态示意图。图9中以业务数据列行键值“220…”为拆分点(小于该值的归属于上半区,等于或大于该值的归属于下半区)。上半区业务数据列族下的各个业务数据依次分别为110…/张三/男/汉/北京…;130…/李四/女/汉/河北…。下半区业务数据列族下的各个业务数据依次分别为220…/王五/男/藏/吉林…;410…/赵六/男/满/湖北…。图10是在图9后图8中索引数据列族被拆分为上半区和下半区的状态示意图。图10中索引数据列行键值中所包含的业务数据列行键值小于拆分点的归属于上半区,不修改键值;索引数据列行键值中所包含的业务数据列行键值等于或大于拆分点的归属于下半区,修改键值,例如将前缀“0”修改为前缀“220”。图10中索引数据列族上半区各个索引数据分别依次为0+汉+110…/(民族索引列空);0+汉+130…/(民族索引列空)。图10中索引数据列族下半区各个索引数据分别依次为220+满+410…/(民族索引列空);220+藏+220…/(民族索引列空)。图11是经过图9和图10拆分后的人员信息HBase表状态示意图。图11中的上半区是图10中索引数据列族上半区与图9中业务数据列族上半区的合并。图11中的下半区是图10中索引数据列族下半区与图9中业务数据列族下半区的合并。参考图1至图11所示,基于HBase的索引系统,包括HBase服务端(例如,图1和图2中的HBase)和与所述HBase服务端相适配的客户端程序,所述HBase服务端包括与HBase表分别互连的索引元信息装置、数据读取模块、数据写入模块、索引构建模块和表管理模块,所述数据读取模块连接所述客户端程序以进行数据读取(例如图1中d,数据读取),所述数据写入模块连接所述客户端程序以进行数据写入(例如图1中c,数据写入),所述索引构建模块连接所述客户端程序以构建索引(例如图1中b,构建索引),所述表管理模块连接所述客户端程序以进行表的创建和管理(例如图1中a,表的创建和管理);所述HBase表包括业务数据列族和为所述业务数据列族下的一个业务数据列建立索引的索引数据列族,所述索引数据列族下设置有索引列,所述索引列对应的所述HBase表的行键列下写入索引列行键值,所述索引列行键值包括被索引的业务数据列列值及其业务数据列行键值,所述业务数据列行键值位于所述业务数据列列值之后。所述数据写入模块和所述索引构建模块可以用于构建普通索引、唯一索引、函数索引、覆盖索引和/或复合索引;所述数据读取模块可以利用已构建的普通索引、唯一索引、函数索引、覆盖索引和/或复合索引加速数据读取。所述HBase能够进行表拆分(例如图1中e,表拆分)。所述数据写入模块和所述数据读取模块均利用HBase的协处理器机制(例如图2中两个协处理器)对所述HBase表的数据读写操作进行拦截,所述数据写入模块针对被拦截到的写请求内容根据所述索引元信息装置中的索引元信息自动启动在所述HBase表内构建索引的数据写入流程(例如图3),所述数据读取模块针对被拦截到的读请求内容根据所述索引元信息装置中的索引元信息自动启动利用所述索引列行键值有序性在所述HBase表内对被索引业务数据列进行查询的数据读取流程(例如图4)。所述索引列行键值均包括一个相同的前缀,所述前缀使得全部索引列行键值自动聚合成所述HBase表内的索引数据区以从排序上与由业务数据列行键值形成的业务数据区始终保持有分隔线(例如图5或图6或图7或图8或图11)。在所述HBase表内所述索引数据区位于所述业务数据区的上方(例如图例如图5或图6或图7或图8或图11),所述索引列行键值中的所述业务数据列行键值用于索引检索后的回表检索(例如图6)。所述HBase服务端包括HBase表拆分模块,所述HBase表拆分模块在拆分过程中屏蔽索引数据对拆分过程的影响,使索引数据区不参与拆分点计算,使处于同一个表分区中的业务数据区和索引数据区在依据业务数据列行键值拆分点拆分成上半区和下半区时始终按照实际的业务数据来拆分,所述索引数据区随所述业务数据区的拆分而拆分,将索引数据列行键值中所包含的业务数据列行键值小于拆分点的归属于上半区,不修改键值;将索引数据列行键值中所包含的业务数据列行键值等于或大于拆分点的归属于下半区,并修改键值(例如图10)。
一种内置索引列族的HBase表,在同一个HBase表内包括业务数据列族和为所述业务数据列族下的一个业务数据列建立索引的索引数据列族,所述索引数据列族下设置有索引列,所述索引列对应的所述HBase表的行键列下写入索引列行键值,所述索引列行键值包括被索引的业务数据列列值及其业务数据列行键值,所述业务数据列行键值位于所述业务数据列列值之后,所述索引列行键值均包括一个相同的前缀,所述前缀使得全部索引列行键值自动聚合成所述HBase表内的索引数据区以从排序上与由业务数据列行键值形成的业务数据区始终保持有分隔线,在所述HBase表内所述索引数据区位于所述业务数据区的上方,所述索引列行键值中的所述业务数据列行键值用于索引检索后的回表检索。
一种内置索引列族的HBase表构建方法,包括HBase服务端和与所述HBase服务端相适配的客户端程序,在所述客户端程序对所述HBase服务端中HBase表的写请求路径上设置有第一协处理器,所述第一协处理器拦截到写请求后根据索引元信息自动启动在所述HBase表内构建索引的数据写入流程,自动构建索引数据列族及其位于HBase表行键列下的索引列行键值,所述索引列行键值包括被索引的业务数据列列值及其业务数据列行键值,所述业务数据列行键值位于所述业务数据列列值之后,所述索引列行键值均包括一个相同的前缀,所述前缀使得全部索引列行键值自动聚合成所述HBase表内的索引数据区以从排序上与由业务数据列行键值形成的业务数据区始终保持有分隔线,在所述HBase表内所述索引数据区位于所述业务数据区的上方,所述索引列行键值中的所述业务数据列行键值用于索引检索后的回表检索。所述数据写入流程包括以下步骤:步骤1,客户端操作者从客户端向HBase表数据列族中的某一业务数据列写入业务数据;步骤2,第一协处理器拦截所述写入业务数据的请求;步骤3,所述第一协处理器从HBase中的索引元信息装置中获取索引元信息;步骤4,所述第一协处理器根据所述索引元信息判断所述业务数据列是否已经建立索引数据列族,如果否,则进入步骤7,如果是,则进入步骤5;步骤5,索引构建模块根据所述业务数据构建索引数据,所述索引数据的结构包括前缀+所述业务数据+所述业务数据作为被索引业务数据列中的列值所对应的HBase表行键列下的业务数据列行键值;步骤6,数据写入模块将所述索引数据作为索引数据列行键值写入所述HBase表行键列下,所述索引数据列族下索引数据列的列值均为空项或者为业务数据列族中另一附带业务数据列的列值;步骤7,数据写入模块将所述业务数据写入到HBase表数据列族中对应的业务数据列中;步骤8,这次数据写入操作完成(例如图3)。
一种HBase的查询加速方法,包括HBase服务端和与所述HBase服务端相适配的客户端程序,在所述客户端程序对所述HBase服务端中HBase表的读请求路径上设置有第二协处理器,所述HBase服务端包括上述内置索引列族的HBase表,所述第二协处理器拦截到读请求内容后根据索引元信息自动启动利用索引列行键值有序性在所述HBase表内对被索引业务数据列进行查询的数据读取流程。所述数据读取流程包括以下步骤:步骤1,客户端操作者从客户端向HBase表发起业务数据查询读取请求;步骤2,第二协处理器拦截所述业务数据查询请求;步骤3,所述第二协处理器从HBase中的索引元信息装置中获取索引元信息;步骤4,所述第二协处理器根据所述索引元信息判断所述业务数据查询请求的查询条件中是否包含了已经建立索引数据的业务数据列,如果否,则按照原有方式对业务数据列族进行检索后向客户端返回查询结果,如果是,则进入步骤5;步骤5,数据读取模块根据索引构建情况生成最优索引检索方案从HBase表行键列下的索引数据列行键值中获得索引查询结果;步骤6,所述数据读取模块判断是否需要回表查询,如果否,则向客户端返回查询结果,如果是,则进入步骤7;步骤7,所述数据读取模块从索引数据列行键值中获取业务数据列行键值,并根据业务数据列行键值回表查询出结果后向客户端返回查询结果(例如图4)。
一种内置索引列族的HBase表拆分方法,所述HBase服务端包括HBase表拆分模块和上述的内置索引列族的HBase表,所述HBase表拆分模块在拆分过程中屏蔽索引数据对拆分过程的影响,使索引数据区不参与拆分点计算,使处于同一个表分区中的业务数据区和索引数据区在依据业务数据列行键值拆分点拆分成上半区和下半区时始终按照实际的业务数据来拆分,所述索引数据区随所述业务数据区的拆分而拆分,将索引数据列行键值中所包含的业务数据列行键值小于拆分点的归属于上半区,不修改键值;将索引数据列行键值中所包含的业务数据列行键值等于或大于拆分点的归属于下半区,并修改键值(例如图9、图10和图11)。
本发明基于HBase的索引系统主要包括如下部分:1)表管理模块;2)索引构建模块;3)数据写入模块;4)数据读取模块。各个部分的组成关系如图1所示。
a.表的创建和管理:HBase自身对表中的列族、列是没有任何约束的,如前所述,本方案在HBase的基础上增加了对表的规范和约束,当客户端程序创建表时,无需明确指定列族的信息,表管理模块会自动对待创建的表进行相关的处理:1)自动建立DATA列族和INDEX列族;2)将索引元信息(即哪张表的哪些列建立了索引)存储到HBase中;3)调用HBase的建表模块创建表。当删除表时,表管理模块会同时删除对应的所有元信息。
b.构建索引:当客户端程序需要对现有的表进行修改时,索引构建模块会根据修改内容对索引进行重建,重建的方式包括:1)当删除现有列时:如果此列已经建立了索引,索引管理模块会先禁用对应的索引,然后删除对应的索引数据以及删除对应的索引元信息,最后删除列及其数据;2)当修改现有列时:如果此列已经建立了索引,索引管理模块会先禁用对应的索引,然后修改列及其数据,最后重新构建索引数据并更新索引元信息;3)当添加新的列时:如果此列需要构建索引,索引管理模块会将新的索引元信息保存到HBase中,然后新增列——新增列不涉及数据的处理;4)当为现有列添加新的索引时:索引管理模块会构建索引数据并更新索引元信息;5)当删除现有列的索引时(只删除索引不删除列):索引管理模块会先禁用对应的索引,然后删除对应的索引数据以及删除对应的索引元信息;6)当修改现有列的索引时(只修改索引不修改列):索引管理模块会先禁用对应的索引,然后重新构建索引数据并更新索引元信息。
本方案支持的索引类型包括:1)普通索引:索引数据中,只有索引行键有值,INDEX列族中不需要存储任何值,被索引的列值不要求唯一(如人员信息表中的民族列)。2)唯一索引:索引数据中,只有索引行键有值,INDEX列族中不需要存储任何值,被索引的列值要求唯一(不能重复出现),当客户端程序写入业务数据时,会检查数据的唯一性(如人员信息表中的民族列就不能建立唯一索引)。3)函数索引:索引数据中,只有索引行键有值,INDEX列族中不需要存储任何值,但索引行键存储的并非是被索引的列值,而是被索引的列值经过函数计算后的值,例如对人员信息表中地址列建立函数索引,函数为length(求字符串长度),那么索引行键的值为:前缀+length(地址)+对应的业务数据行键。4)覆盖索引:索引数据中,除索引行键有值外。INDEX列族中还需要存储其他列的值(根据索引元信息决定包含哪些列),例如对人员信息表中的姓名、性别列建立覆盖索引,其中姓名为主索引,性别为索引附带列,如图7所示。覆盖索引的好处是当需要查询的列全部包含在索引中时,就不需要进行回表查询,只查询索引数据即可获取全部需要的列,例如:查询姓名为"张三"的人员的姓名和性别(即查询结果只要姓名和性别,不要住址等信息),那么就不需要再查询数据区的数据,因为索引中已经包含了性别的数据。5)复合索引:即可以针对多个列创建上述索引,例如在人员信息表中,对性别列+名族列创建复合的普通索引。一张数据表可以对任意列建立索引,可建立多个索引,多个索引之间互不影响,其索引数据均存储在INDEX列族中。本发明允许在同一个数据表中创建多个索引,针对同一列也可以建立不同类型的索引,例如人员信息表中,可以对姓名建立普通索引,也可以对姓名+性别建立复合索引。
c.数据写入:当客户端程序向HBase的表中写入数据时,数据写入模块会对数据进行实时拦截检查和处理,处理过程如图3所示,整个过程对客户端程序是透明的,即客户端程序只需写入业务数据,无需关注和处理索引相关的工作,索引相关的处理流程是在HBase服务端由数据写入模块自动完成的。其中,根据业务数据构建索引数据时,需要获取对应的表分区的行键最小值(StartKey),用于拼接索引行键,StartKey作为索引行键的前缀,以保障索引数据排在业务数据的前面。根据不同的索引类型(普通索引、唯一索引、函数索引、覆盖索引),构建行键的方式是不同的,具体如下:1)普通索引:索引行键=前缀+被索引的列的数据+被索引的列的数据对应的行键,INDEX列族为空(只有索引行键);2)唯一索引:索引行键=前缀+被索引的列的数据+被索引的列的数据对应的行键,INDEX列族为空(只有索引行键),还需检查索引行键的唯一性;3)函数索引:索引行键=前缀+f(被索引的列的数据)+被索引的列的数据对应的行键,INDEX列族为空(只有索引行键),其中f为索引函数;4)覆盖索引:索引行键=前缀+被索引的列的数据+被索引的列的数据对应的行键,INDEX列族中需要包含附带列的数据。
d.数据读取:当客户端程序从HBase的表中查询数据时,数据读取模块会实时拦截客户端的数据查询请求,先从HBase中获取表对应的索引元信息,根据索引的构建情况,生成最优的查询方案(是否利用索引、利用哪个索引),并执行最优方案对数据进行查询,最终返回查询结果,具体流程如图4所示。本方案允许对在数据查询的过程中,查询条件可能包含了多个索引,例如姓名列和性别列均创建了索引,查询条件是:姓名为"张三"且性别为"男"的人员信息,那么查询方案既可以利用姓名索引也可以利用性别索引。数据读取模块在索引的选择上,会根据索引数据的扫描成本,选择最优的索引——即扫描的行数越少,成本越低,性能越好。显然,选择姓名索引扫描的成本最低(因为性别非男即女,扫描的行数会更多),最终,查询方案会先根据姓名索引找到对应的数据行键,回表定位到人员信息后,再将性别为"男"的人员信息返回。
e.表拆分:在HBase中,当表中的数据一定的阈值后,HBase会对表进行拆分,将一张表拆分为两个表分区(Region),每个表分区包含一部分数据,表分区达到阈值后会继续拆分。其拆分的规则是:根据表的行键的范围(最小值~最大值)计算出拆分点,行键小于拆分点的数据作为上半区,行键大于等于拆分点的数据所谓下半区,最终将表中的数据一分为二,如图9所示。HBase是集群模式,表被拆分后,表分区会被托管到不同的服务器节点上,本方案通过对HBase表拆分过程的改造,保证了业务数据与对应的索引数据始终可以被拆分到同一表分区中,例如人员信息表(其中民族列创建了索引)的初始状态如图8所示,人员信息表只有一个表分区(即未被拆分),所有业务数据与索引数据均在此分区中。当人员信息表达到切分阈值时,HBase首先会计算切分点,在本方案中,拆分点的计算方法进行了改造,只根据DATA列族的行键进行计算,将INDEX列族的行键排除在外,即只根据业务数据计算,索引数据不参与计算,这样就使得拆分过程始终是按照实际的业务数据来拆分的,屏蔽了索引数据对拆分过程的影响。假设图8中计算出的拆分点是"220...",那么DATA列族拆分后的情况如图9所示,其拆分过程是按照HBase原有的拆分逻辑进行拆分的。INDEX列族的拆分过程,在本方案中进行了改进,不再按照HBase原有的流程进行拆分,而是在拆分的过程中同时对索引行键进行修改,如果索引行键中包含的数据行键小于拆分点,则不做额外处理;如果索引行键中包含的数据行键大于等于拆分点,则将索引行键的前缀修改为拆分点,通过这样处理,INDEX列族在拆分后的状态如图10所示。通过INDEX列族拆分过程的改进,保证了表在拆分之后INDEX列族中的数据始终与DATA列族中的数据同属一个表分区,人员信息表最终拆分后的状态如图11所示,拆分后的上下半区中,业务数据与索引数据始终是一一对应的,没有出现跨区的情况。这样处理的优势在于:当利用索引进行数据查询时,回表的过程不需要进行跨区检索,进一步提高了查询的效率。综上,通过本方案,可以在HBase中实现高效率的数据查询检索,索引相关的处理对客户端程序是无感知的,客户端使用HBase本身的查询方式即可,在不更改客户端程序的前提下即能实现数据查询的加速,通过对多种索引类型的支持,满足现实中复杂查询条件的数据查询需求,并且通过对表拆分的改进,在大数据量的情况下,仍能保持高效的数据查询。
参考图2,本方案在HBase的基础上,利用协处理器机制对HBase的数据读写进行拦截,拦截到读写请求后,索引系统(即本方案)自动对读写请求进行处理:拦截写请求根据索引元信息构建索引;拦截读请求根据索引元信息利用以构建的索引生成最优的查询逻辑并执行查询。拦截过程如图2所示。本方案所述的索引本质上为一种有序的数据,索引系统在拦截到读写请求后,通过对HBase数据读写流程的改进和优化,能够将原本无序的数据以有序的形式写入到HBase表中,并在读取相关数据时利用有序的特性对数据进行快速定位和查询。本方案还对HBase表做了规定和约束,当创建HBase表时,本方案会自动为表建立两个列族,列族名称分别为DATA和INDEX,并且禁止HBase自身对表的列族进行修改,即禁止添加、删除、修改列族的数量和名称。在本方案中,数据及其对应的索引是存储在同一个HBase表中的。其中列族DATA用于存储真正的业务数据,列族INDEX用于存储索引数据,以人员信息表为例,人员的主要属性包括:身份证号、姓名、性别、民族、住址等,在本方案中,人员信息表的结构如图5所示,其中民族列已经建立了索引(索引类型为普通索引)。
在图5中,从纵向来看,人员信息数据是存储在DATA列族中的(包括行键,为业务数据),性别索引是存储在INDEX列族中的(包括行键,为索引数据)。从横向来看,人员信息表在逻辑上分为业务数据和索引数据,其中索引数据只有行键有值,INDEX列族中的民族索引列的值为空(因为民族索引为普通索引,普通索引只需行键有值)。对于前4行数据来说(索引区),DATA列族中是没有数据的,对于后4行数据来说(数据区),INDEX列族是没有数据的。
数据区的行键为人员的身份证号,而索引区的行键(如:0+汉+110...)是由多种数据组合而成的,其格式为:前缀+被索引的列的数据+被索引的列的数据对应的行键。以"0+汉+110..."为例,其中0是前缀,保证了索引区行键始终排在数据区行键的前面("0"小于所有的身份证号),民族列已经建立了索引,"汉"是名族列的数据,"110..."是数据区中对应的身份证号。
当需要根据民族对数据进行检索时,例如:查询所有民族为汉族的人员信息,那么就无需对所有人员进行一一比对过滤,可以将查询条件转化为对索引区行键的快速定位,即查找索引行键以"0+汉"开头的数据,然后通过索引行键中的身份证号即可直接获取对应大的人员信息。此过程相当于对行键进行了两次检索,先通过名族获取到对应的身份证号,再通过身份证号获取到对应的人员信息,这种两次检索的过程称为回表,意思是索引行键快速获取到身份证号之后需要再反查一次数据行键。因为在HBase中行键是始终有序的,有序数据的查找定位的效率要远好于无序数据的全部遍历(全表扫描),故利用索引可以到达加速查询的目标。回表的过程如图6所示。
在此指明,以上叙述有助于本领域技术人员理解本发明创造,但并非限制本发明创造的保护范围。任何没有脱离本发明创造实质内容的对以上叙述的等同替换、修饰改进和/或删繁从简而进行的实施,均落入本发明创造的保护范围。

Claims (8)

1.基于HBase的索引系统,包括HBase服务端和与所述HBase服务端相适配的客户端程序,其特征在于,所述HBase服务端包括与HBase表分别互连的索引元信息装置、数据读取模块、数据写入模块、索引构建模块和表管理模块,所述数据读取模块连接所述客户端程序以进行数据读取,所述数据写入模块连接所述客户端程序以进行数据写入,所述索引构建模块连接所述客户端程序以构建索引,所述表管理模块连接所述客户端程序以进行表的创建和管理;所述HBase表包括业务数据列族和为所述业务数据列族下的一个业务数据列建立索引的索引数据列族,所述索引数据列族下设置有索引列,所述索引列对应的所述HBase表的行键列下写入索引列行键值,所述索引列行键值包括被索引的业务数据列列值及其业务数据列行键值,所述业务数据列行键值位于所述业务数据列列值之后;
所述HBase服务端包括HBase表拆分模块,所述HBase表拆分模块在拆分过程中屏蔽索引数据对拆分过程的影响,使索引数据区不参与拆分点计算,使处于同一个表分区中的业务数据区和索引数据区在依据业务数据列行键值拆分点拆分成上半区和下半区时始终按照实际的业务数据来拆分,所述索引数据区随所述业务数据区的拆分而拆分,将索引数据列行键值中所包含的业务数据列行键值小于拆分点的归属于上半区,不修改键值;将索引数据列行键值中所包含的业务数据列行键值等于或大于拆分点的归属于下半区,并修改键值;
所述数据写入模块和所述索引构建模块用于构建普通索引、唯一索引、函数索引、覆盖索引和/或复合索引;所述数据读取模块利用已构建的普通索引、唯一索引、函数索引、覆盖索引和/或复合索引加速数据读取。
2.根据权利要求1所述的基于HBase的索引系统,其特征在于,所述数据写入模块和所述数据读取模块均利用HBase的协处理器机制对所述HBase表的数据读写操作进行拦截,所述数据写入模块针对被拦截到的写请求内容根据所述索引元信息装置中的索引元信息自动启动在所述HBase表内构建索引的数据写入流程,所述数据读取模块针对被拦截到的读请求内容根据所述索引元信息装置中的索引元信息自动启动利用所述索引列行键值有序性在所述HBase表内对被索引业务数据列进行查询的数据读取流程。
3.根据权利要求1所述的基于HBase的索引系统,其特征在于,所述索引列行键值均包括一个相同的前缀,所述前缀使得全部索引列行键值自动聚合成所述HBase表内的索引数据区以从排序上与由业务数据列行键值形成的业务数据区始终保持有分隔线;在所述HBase表内所述索引数据区位于所述业务数据区的上方,所述索引列行键值中的所述业务数据列行键值用于索引检索后的回表检索。
4.一种内置索引列族的HBase表,其特征在于,在同一个HBase表内包括业务数据列族和为所述业务数据列族下的一个业务数据列建立索引的索引数据列族,所述索引数据列族下设置有索引列,所述索引列对应的所述HBase表的行键列下写入索引列行键值,所述索引列行键值包括被索引的业务数据列列值及其业务数据列行键值,所述业务数据列行键值位于所述业务数据列列值之后,所述索引列行键值均包括一个相同的前缀,所述前缀使得全部索引列行键值自动聚合成所述HBase表内的索引数据区以从排序上与由业务数据列行键值形成的业务数据区始终保持有分隔线,在所述HBase表内所述索引数据区位于所述业务数据区的上方,所述索引列行键值中的所述业务数据列行键值用于索引检索后的回表检索;
所述HBase表在拆分过程中屏蔽索引数据对拆分过程的影响,使索引数据区不参与拆分点计算,使处于同一个表分区中的业务数据区和索引数据区在依据业务数据列行键值拆分点拆分成上半区和下半区时始终按照实际的业务数据来拆分,所述索引数据区随所述业务数据区的拆分而拆分,将索引数据列行键值中所包含的业务数据列行键值小于拆分点的归属于上半区,不修改键值;将索引数据列行键值中所包含的业务数据列行键值等于或大于拆分点的归属于下半区,并修改键值;
利用数据写入模块和索引构建模块构建普通索引、唯一索引、函数索引、覆盖索引和/或复合索引;数据读取模块利用已构建的普通索引、唯一索引、函数索引、覆盖索引和/或复合索引加速数据读取。
5.一种内置索引列族的HBase表构建方法,其特征在于,包括HBase服务端和与所述HBase服务端相适配的客户端程序,在所述客户端程序对所述HBase服务端中HBase表的写请求路径上设置有第一协处理器,所述第一协处理器拦截到写请求后根据索引元信息自动启动在所述HBase表内构建索引的数据写入流程,自动构建索引数据列族及其位于HBase表行键列下的索引列行键值,所述索引列行键值包括被索引的业务数据列列值及其业务数据列行键值,所述业务数据列行键值位于所述业务数据列列值之后,所述索引列行键值均包括一个相同的前缀,所述前缀使得全部索引列行键值自动聚合成所述HBase表内的索引数据区以从排序上与由业务数据列行键值形成的业务数据区始终保持有分隔线,在所述HBase表内所述索引数据区位于所述业务数据区的上方,所述索引列行键值中的所述业务数据列行键值用于索引检索后的回表检索;
所述HBase表在拆分过程中屏蔽索引数据对拆分过程的影响,使索引数据区不参与拆分点计算,使处于同一个表分区中的业务数据区和索引数据区在依据业务数据列行键值拆分点拆分成上半区和下半区时始终按照实际的业务数据来拆分,所述索引数据区随所述业务数据区的拆分而拆分,将索引数据列行键值中所包含的业务数据列行键值小于拆分点的归属于上半区,不修改键值;将索引数据列行键值中所包含的业务数据列行键值等于或大于拆分点的归属于下半区,并修改键值;
利用数据写入模块和索引构建模块构建普通索引、唯一索引、函数索引、覆盖索引和/或复合索引;数据读取模块利用已构建的普通索引、唯一索引、函数索引、覆盖索引和/或复合索引加速数据读取。
6.根据权利要求5所述的内置索引列族的HBase表构建方法,其特征在于,所述数据写入流程包括以下步骤:步骤1,客户端操作者从客户端向HBase表数据列族中的某一业务数据列写入业务数据;步骤2,第一协处理器拦截所述写入业务数据的请求;步骤3,所述第一协处理器从HBase中的索引元信息装置中获取索引元信息;步骤4,所述第一协处理器根据所述索引元信息判断所述业务数据列是否已经建立索引数据列族,如果否,则进入步骤7,如果是,则进入步骤5;步骤5,索引构建模块根据所述业务数据构建索引数据,所述索引数据的结构包括前缀+所述业务数据+所述业务数据作为被索引业务数据列中的列值所对应的HBase表行键列下的业务数据列行键值;步骤6,数据写入模块将所述索引数据作为索引数据列行键值写入所述HBase表行键列下,所述索引数据列族下索引数据列的列值均为空项或者为业务数据列族中另一附带业务数据列的列值;步骤7,数据写入模块将所述业务数据写入到HBase表数据列族中对应的业务数据列中;步骤8,这次数据写入操作完成。
7.一种HBase的查询加速方法,其特征在于,包括HBase服务端和与所述HBase服务端相适配的客户端程序,在所述客户端程序对所述HBase服务端中HBase表的读请求路径上设置有第二协处理器,所述HBase服务端包括上述权利要求4所述的内置索引列族的HBase表,所述第二协处理器拦截到读请求内容后根据索引元信息自动启动利用索引列行键值有序性在所述HBase表内对被索引业务数据列进行查询的数据读取流程。
8.根据权利要求7所述的HBase的查询加速方法,其特征在于,所述数据读取流程包括以下步骤:步骤1,客户端操作者从客户端向HBase表发起业务数据查询读取请求;步骤2,第二协处理器拦截所述业务数据查询请求;步骤3,所述第二协处理器从HBase中的索引元信息装置中获取索引元信息;步骤4,所述第二协处理器根据所述索引元信息判断所述业务数据查询请求的查询条件中是否包含了已经建立索引数据的业务数据列,如果否,则按照原有方式对业务数据列族进行检索后向客户端返回查询结果,如果是,则进入步骤5;步骤5,数据读取模块根据索引构建情况生成最优索引检索方案从HBase表行键列下的索引数据列行键值中获得索引查询结果;步骤6,所述数据读取模块判断是否需要回表查询,如果否,则向客户端返回查询结果,如果是,则进入步骤7;步骤7,所述数据读取模块从索引数据列行键值中获取业务数据列行键值,并根据业务数据列行键值回表查询出结果后向客户端返回查询结果。
CN202010765009.7A 2020-08-03 2020-08-03 基于HBase的索引系统及查询加速方法 Active CN111737267B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010765009.7A CN111737267B (zh) 2020-08-03 2020-08-03 基于HBase的索引系统及查询加速方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010765009.7A CN111737267B (zh) 2020-08-03 2020-08-03 基于HBase的索引系统及查询加速方法

Publications (2)

Publication Number Publication Date
CN111737267A CN111737267A (zh) 2020-10-02
CN111737267B true CN111737267B (zh) 2021-01-26

Family

ID=72656990

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010765009.7A Active CN111737267B (zh) 2020-08-03 2020-08-03 基于HBase的索引系统及查询加速方法

Country Status (1)

Country Link
CN (1) CN111737267B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114090589A (zh) * 2022-01-20 2022-02-25 苏州浪潮智能科技有限公司 基于HBase的数据查询方法、装置和计算机设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9218383B2 (en) * 2013-03-15 2015-12-22 International Business Machines Corporation Differentiated secondary index maintenance in log structured NoSQL data stores
CN109165222A (zh) * 2018-08-20 2019-01-08 福州大学 一种基于协处理器的HBase二级索引创建方法以及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9218383B2 (en) * 2013-03-15 2015-12-22 International Business Machines Corporation Differentiated secondary index maintenance in log structured NoSQL data stores
CN109165222A (zh) * 2018-08-20 2019-01-08 福州大学 一种基于协处理器的HBase二级索引创建方法以及系统

Also Published As

Publication number Publication date
CN111737267A (zh) 2020-10-02

Similar Documents

Publication Publication Date Title
US20080201296A1 (en) Partitioning of nested tables
JP2583010B2 (ja) 多層インデックス構造におけるローカルインデックステーブル及び大域インデックステーブルの間の一貫性を維持する方法
US11514040B2 (en) Global dictionary for database management systems
CN102122285B (zh) 一种数据缓存系统中的数据查询系统和数据查询方法
US10733172B2 (en) Method and computing device for minimizing accesses to data storage in conjunction with maintaining a B-tree
US20190057133A1 (en) Systems and methods of bounded scans on multi-column keys of a database
US20220083618A1 (en) Method And System For Scalable Search Using MicroService And Cloud Based Search With Records Indexes
US20200042510A1 (en) Method and device for correlating multiple tables in a database environment
US7162478B2 (en) System and method for correlated fragmentations in databases
US10282437B2 (en) Partial indexes for partitioned tables
US8880553B2 (en) Redistribute native XML index key shipping
US20230161765A1 (en) System and method for disjunctive joins using a lookup table
US7136861B1 (en) Method and system for multiple function database indexing
CN111737267B (zh) 基于HBase的索引系统及查询加速方法
KR101575639B1 (ko) 지도 서비스를 위한 타일 이미지 갱신 시스템 및 그 방법
CN116541427B (zh) 数据查询方法、装置、设备及存储介质
US20230205769A1 (en) System and method for disjunctive joins
US20170242880A1 (en) B-tree index structure with grouped index leaf pages and computer-implemented method for modifying the same
Bao et al. Query optimization of massive social network data based on hbase
CN111061759A (zh) 数据查询方法及装置
US20170177672A1 (en) Flexible text searching for data objects of object notation
CN111309704B (zh) 数据库操作方法和数据库操作系统
EP3995972A1 (en) Metadata processing method and apparatus, and computer-readable storage medium
Gosavi et al. Closest Keyword Retrieval with Data Mining Approach
CN113032479A (zh) 一种HBase非主键索引的方法及HBase系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant