CN104850572B - HBase非主键索引构建与查询方法及其系统 - Google Patents
HBase非主键索引构建与查询方法及其系统 Download PDFInfo
- Publication number
- CN104850572B CN104850572B CN201410658614.9A CN201410658614A CN104850572B CN 104850572 B CN104850572 B CN 104850572B CN 201410658614 A CN201410658614 A CN 201410658614A CN 104850572 B CN104850572 B CN 104850572B
- Authority
- CN
- China
- Prior art keywords
- index
- data
- hbase
- user
- primary 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
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种HBase非主键索引构建与查询方法及其系统。所述方法包括:在分布式内存和Hbase数据表上建立全局非主键索引;识别针对非主键属性的查询,依据所述全局非主键索引定位到相应的索引节点,并向含有结果集的所述索引节点发送查询请求。通过在分布式内存和Hbase数据表上建立全局非主键索引,以及在识别针对非主键属性的查询时,依据所述全局非主键索引定位到相应的索引节点,并向含有结果集的所述索引节点发送查询请求,保证不含有结果集的节点不参加查询,从而避免了现有技术中分布式非主键索引存在的性能浪费的问题。提高了HBase上大数据非主键属性的查询性能,实现了为HBase提供非主键属性上的实时查询的能力。
Description
技术领域
本发明涉及数据库技术领域,具体而言,涉及一种HBase非主键索引构建与查询方法及其系统。
背景技术
HBase是一个面向列、高可靠、可扩展的分布式数据存储系统,数据以<key,value><键-值>的形式存储,其中key称为行键,相当于关系数据库中的主键。数据会按照行键的字节字典序有序地组织存储。HBase数据文件存储在Hadoop HDFS(Hadoop Distributed FileSystem,分布式文件系统)中,以提供良好的可扩展性和容错性。行键唯一地标识HBase的一行数据,每行数据可以有多个属性列,相关的列可以归到一个列簇。列簇是HBase存储的基本逻辑单元,一行数据中同一列簇的数据被连续存放,这就是HBase的列存储。在物理存储上,HBase表被横向分割为多个Region,Master服务器会将多个Region均衡地分配到不同的Region服务器上,并且管理Region的分裂和合并,数据的横向划分为HBase提供了良好的可扩展性。
目前,在HBase上检索数据的方法有如下三种:指定单个行键查询、指定行键的范围查询、以及扫描(Scan)。HBase以字节数组的字典序对行键进行排序,支持高效的指定行键的单点查询和指定行键范围的范围查询。而扫描操作主要用于对非主键数据列的查询,基于行键检索的时间复杂性是O(logN),如果使用Bloom Filter甚至可以达到O(1),而扫描操作的时间复杂性是O(N)。
随着在HBase系统上应用的驱动,人们发现单一的通过Rowkey检索数据的方式不能再满足更多应用的需求,人们希望像SQL一样检索数据,例如select*from table wherecol=val。可是,HBase之前的定位是大表的存储,要进行这样的查询,往往是要通过类似Hive、Pig等系统进行全表的MapReduce计算,这种方式既浪费了机器的计算资源,又因高延迟使得应用黯然失色。所以在HBase的非主键属性上建立索引是迫切的需求。
HBase上的非主键查询采用扫描的方式,数据从头开始逐行扫描,依次检查每条记录的查询属性是否满足查询条件,将满足查询条件的结果集汇总返回。这种方式简单低效,难以满足大数据上的实时查询需求。所以,一些企业和研究小组陆续开发出了面向实际应用需求的HBase非主键索引,以提高HBase上非主键属性查询的效率。
总体来说,当前HBase非主键索引机制方案按照其基本逻辑结构分为两类:集中式非主键索引与分布式非主键索引。
集中式非主键索引是集中管理的,它们是传统单节点数据管理系统中索引结构的直观扩展,不需了解数据的真实分布情况。处理被索引字段上的检索请求的过程分为两个步骤:
首先在全局索引结构中定位含有结果集的数据节点;
然后访问相应的节点存取索引数据。
HBase-indexer是一个集中式的非主键索引方案。通过将HBase的更新数据异步发送到索引服务器上,在索引服务器上分析数据并生成对应索引数据,索引服务器会定期的将索引数据推送到SolrCloud服务集群上。查询则通过访问Solr服务来定位HBase上的内容。这种索引机制定期的对索引进行更新,索引的时效性稍差,在面向实时应用的时候,难以有效满足应用需求。
分布式方案没有维护全局索引,而是将其局部化到每个单独的计算节点上。计算节点相互之间不存在依赖关系,这为检索请求的并发执行带来了便利。当拥有索引的属性上的检索请求到达时,检索任务将被分发到所有的计算节点上并以并发的方式执行。最终的检索结果将是所有数据节点上返回结果的并集。
其中,Hindex是一个分布式非主键索引方案。Hindex通过对HBase用户表的每个Region建立单独索引的方式来提高非主键查询的效率。查询请求发送到每个Region服务器,然后通过Region的索引将需要的数据过滤并返回。因为查询需要访问所有Region,影响查询性能,并且Hindex修改了HBase-0.94.8的部分代码,这给今后对HBase的版本升级带来一定的困难。
另外,分布式方案的节点之间具有独立性,检索任务也分配到各节点中独立执行,从而,并行计算资源能够得到很好地利用。但是,尤其以最常用到的等值条件为代表,由于绝大多数检索任务的目标记录数量相对较少,在分布式集群中并行地执行该任务往往造成很多未存储任何目标记录的计算节点也触发了检索过程,而最终将返回空集。在检索任务频繁的情况下,这一并行执行过程将会耗费大量的不必要的计算资源,最终将会降低系统的吞吐量。
发明内容
为了克服现有技术中分布式非主键索引存在的性能浪费,本发明的目的在于提供一种HBase非主键索引构建与查询方法及其系统。
本发明采用以下技术方案实现:
一种HBase非主键索引构建与查询方法,包括:
在Hbase数据表上建立全局非主键索引;
识别针对非主键属性的查询,依据所述全局非主键索引定位到分布式内存中相应的索引节点,并向含有结果集的所述索引节点发送查询请求。
优选地,在HBase数据表上建立全局非主键索引,并将其存储在HBase持久化索引存储层中。
优选地,HBase非主键索引构建与查询方法及其装置。,在分布式内存中还存储热点非主键索引;
在存储数据时,根据访问信息标记缓存中的热数据,并将热数据缓存到基于内存的热点索引缓存层中。
优选地,HBase可以为全局非主键索引表维护全局统一的Region划分,为全局非主键索引表提供可扩展性和容错性支持。
优选地,为HBase数据表中待建立索引的非主键数据列定义如下格式的索引表主键:
<用户表索引列名,用户表索引列值,用户表主键>;
其中,用户表索引列名是HBase数据表中被索引的数据列的名称;
用户表索引列值是HBase数据表中被索引的列的值;
用户表主键是HBase数据表中被索引的记录的主键值。
优选地,在全局非主键索引表中存储了HBase数据表中被频繁访问的列值。
优选地,将访问频度大于一预定阈值的的索引数据作为热点数据缓存在内存中。
优选地,热点非主键索引的主键格式为:
<用户表索引列名,用户表索引列值>;
其中,用户表索引列名是HBase数据表中被索引的数据列的名称;
用户表索引列值是HBase数据表中被索引的列的值;
优选地,利用一致性哈希来完成热点数据在分布式内存中的存储管理。
一种HBase非主键索引构建与查询系统,包括:
索引构建管理模块,用于在Hbase数据表上建立全局非主键索引;
持久化存储管理模块,用于持久化存储所述全局非主键索引;
查询执行引擎,用于识别针对非主键属性的查询,依据所述全局非主键索引定位到分布式内存中相应的索引节点,并向含有结果集的所述索引节点发送查询请求。
优选地,所述的HBase非主键索引构建与查询系统还包括:
索引内存缓存模块,用于根据访问信息标记缓存中的热数据,并将热数据缓存到基于内存的热点索引缓存层中。
优选地,所述索引构建管理模块利用HBase提供的Coprocessor接口实现对于流式数据的索引构建。
优选地,所述索引构建管理模块利用Hadoop MapReduce程序来并行化执行静态数据的索引构建。
采用本发明,通过在Hbase数据表上建立全局非主键索引,以及在识别针对非主键属性的查询时,依据所述全局非主键索引定位到分布式内存中相应的索引节点,并向含有结果集的所述索引节点发送查询请求,保证不含有结果集的节点不参加查询,从而避免了现有技术中分布式非主键索引存在的性能浪费的问题。提高了HBase上大数据非主键属性的查询性能,实现了为HBase提供非主键属性上的实时查询的能力。
附图说明
图1为本实施例中非主键索引存储和查询模型示意图;
图2为本实施例中基于一致性哈希的分布式索引内存缓存存储机制示意图;
图3为本实施例中HBase非主键索引构建与查询系统功能模块示意图;
图4为本实施例中内存缓存的索引及存储结构示意图;
图5为本实施例中范围查询中的值表查询示意图;
图6为本实施例中范围查询中的批量查询和结果返回示意图。
本发明目的的实现、功能特点及优异效果,下面将结合具体实施例以及附图做进一步的说明。
具体实施方式
下面结合附图和具体实施例对本发明所述技术方案作进一步的详细描述,以使本领域的技术人员可以更好的理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
本实施例通过在分布式内存和Hbase数据表上建立全局非主键索引,在非主键属性上的查询可以直接定位到部分索引节点,然后向这部分确定含有结果集的索引节点发送查询请求,保证不含有结果集的节点不参加查询。
全局非主键索引存储在HBase中,热点非主键索引存储在分布式内存中,HBase可以为非主键索引表维护全局统一的Region划分,为索引表提供可扩展性和容错性支持。如附图1所示,其提供了本发明提出的非主键索引的存储和查询模型。
参考该图1,在本实施例中,数据的存储过程包括如下步骤:
步骤1:在HBase用户表上建立索引,存储在HBase持久化索引存储层中;
步骤2:根据访问信息标记缓存中的热数据,将热数据缓存到基于内存的热点索引缓存层中。
一、非主键索引构建方法
为保存在HBase数据表中的非主键数据列建立索引表,并将索引表保存在HBase中,借助HBase的特性获得良好的可扩展性和容错性。每个索引表用来存储管理HBase数据表中的某个待查询非主键数据列的索引。由于索引表存储在HBase中,因此,索引表的每一行也需要一个主键。为此,本发明实施例为HBase数据表中待建立索引的非主键数据列定义如下格式的索引表主键:
<用户表索引列名(简短别名),用户表索引列值,用户表主键>;
其中,用户表索引列名是用户表中被索引的数据列的名称。通过使用用户表索引列名,可将用户表中不同列的索引存放到HBase的同一张表中,减少HBase表的数量。索引列名可以使用简短别名代替,例如索引列名“Age”使用简短别名“a”代替,这从而减少索引表主键存储空间的开销。
用户表索引列值,是用户表中被索引的列的值。格式中的“,”代表的是分隔符,如果索引列的值不是固定长度,那么需要使用用户指定的自定义分隔符(一般是索引列的值中不会被使用到的字符)。
用户表主键,是用户表被索引的记录的主键值。在索引表主键中存储该值有两个作用:
一是保证了索引表主键的唯一性;
二是给出了用户表中被索引的记录的地址,即通过用户表主键,可以获得用户表中被索引的记录。
此外,在索引表的数据中存储了用户表中被频繁访问的列值,从而可以直接在索引表中取得需要的信息,极大地提高查询效率。
上述索引表将为HBase数据表实现索引数据的持久化存储,构成持久化索引存储层,在其他实施例中,可进一步优选地把索引中那些访问频度高的索引数据作为热点数据缓存在内存中,形成基于HBase和分布式内存的分层式索引存储和查询机制,以进一步提高索引表查询速度。
内存热点索引数据缓存格式不同于持久化存储中的索引格式,内存缓存索引的主键格式为:
<用户表索引列名(简短别名),用户表索引列值>;
其中,用户表索引列名和用户表索引列值的含义与持久化索引存储层中的相同。内存索引构建的基本思路类似于倒排索引,内存索引缓存层中的每个索引主键对应着一个具有相同索引列值的索引记录集合,该集合包含了与该索引值对应的所有索引表数据记录。与持久化索引存储层一样,集合中也附加了可能需要使用的其他非主键列数据。因此,一个完整的内存索引数据格式如下:
索引主键:<用户表索引列名(简短别名),用户表索引列值>;
索引集合:{<用户表主键,{<频繁访问列名,频繁访问列值>}>}。
二、基于一致性哈希的分布式内存缓存
本实施例利用HBase服务器节点上的分布式内存来存储管理所有的索引热点数据。为了在分布式内存环境下提供有效的索引存储管理,本实施例采用一致性哈希来完成索引热点数据在分布式内存中的存储管理。基于一致性哈希的分布式索引内存缓存存储机制如图2所示。
在分布式内存缓存中,使用一致性哈希来确定数据所在的服务器节点。如图2所示,一致性哈希的基本原理如下:使用某种哈希函数将所有数据映射到圆环边上的某一点上(如果使用32位地址空间,那么圆环上总共存在232个点)。同时使用另一相同或不同的哈希函数将每个存储节点映射到该圆环边上的伪随机分布点上。当查找数据所在的节点时,一致性哈希算法会从圆环上该数据的映射点开始,沿顺时钟方向进行搜索,找到的第一个存储节点即为数据所在的节点。
在节点发生变化时(如节点失效或节点加入),只有和变化节点相邻的节点数据需要迁移,从而可减少节点的加入和退出带来的计算和数据传输开销。例如,当图2中某存储节点出现故障时,原先映射到该节点的数据会映射到顺时钟方向遇到的第一个存储节点上,如图2所示,部分数据被重新映射到其他存储节点之上。而增加存储节点的时候,数据映射关系的变化与上述的过程正好相反,新节点将会负责管理其哈希地址到它逆时针方向上第一个存储节点之间的所有数据。
三、系统构架和系统实现
基于以上的非主键索引模型和技术方法,本实施例设计并实现了一个基于HBase的分层式非主键索引查询系统HiBase,该系统支持基于HBase的持久化索引存储,提供了非主键索引的数据查询方法。系统功能模块划分如图3所示。
1)索引构建管理模块,管理索引的元数据(记录用户表对应的索引表名称、索引列等信息),并实现针对HBase的流式数据和静态数据两种不同特性数据的索引构建方法,包括支持索引表和值表的插入、删除、更新操作。
2)持久化存储管理模块,提供索引表和值表的持久化存储,依赖于HBase为持久化存储数据提供可扩展性和容错性。
3)索引内存缓存模块,管理索引热点数据的缓存存储、更新和地址映射,实现热度累积的缓存替换策略,使得最近频繁访问的数据能够缓存到内存中。
4)查询执行引擎,将用户的查询请求翻译成系统识别的命令,调用对应的方法执行查询,并将查询结果汇总返回给客户端。
四、索引构建过程
本实施例提供的索引构建方法和系统,支持高度并行的索引构建,考虑到数据源的不同特征,例如,本实施例提供两种索引构建方法:面向流式数据的索引构建和面向批处理数据的索引构建。
多数大数据的应用场景都是面向流式数据输入的(数据不断流向HBase的各个节点),因此面向流式数据的索引构建成为HBase索引构建的主要方法。面向批处理数据的索引构建是为了能够对已经存在的大量线下数据(即静态数据)构建索引。无论哪种方法,索引创建过程都是读取用户表的一条记录,在非主键属性上生成一条索引记录,将索引数据分别更新到持久化存储,并更新值表。
对于流式数据索引构建方法,利用HBase提供的Coprocessor接口实现索引构建。HBase提供了两种类型的Coprocessor:Observer与Endpoint,本申请利用Observer类型的Coprocessor来构建相关的索引。具体来说是使用HBase提供的RegionObserver接口的回调函数prePut,当客户端存储一个记录之前会被触发调用。prePut方法首先根据索引信息对用户发起的Put操作进行分析,如果Put操作的数据包含有索引列,即包含要索引的数据,则触发索引数据的插入。
对于静态数据索引构建方法,由于静态数据一般相对较大,为了能够加快静态数据索引的构建速度,本申请利用Hadoop MapReduce程序来并行化执行静态数据索引构建。构造索引的MapReduce实现过程如下:
1)Map输入:<Row,Result>,其中Row为用户表的行键,Result是通过Row获得的HBase记录。
2)Map处理过程:根据索引信息,为每个输入<Row,Result>生成其对应的索引数据,并将索引数据插入到持久化存储的HBase索引表中。
整个过程不需要一般MapReduce程序的Reduce阶段即可完成,同时由于HBase用户表记录之间是相互独立的,所以该实现可以充分利用MapReduce提供的并行化处理能力来加速索引构建过程。
上述机制可以保证系统支持高效的索引插入、删除、更新操作,具体地:
对用户表进行数据插入时,基于HBase Coprocessor Observer的索引构建模块会根据操作信息来确定是否触发索引表的插入,如果用户表的新增记录索引列属性为空,则不会触发索引表的插入操作,否则触发索引表的插入。
对用户表进行数据删除时,基于HBase Coprocessor Observer的索引构建模块会根据操作信息来确定是否触发索引表的删除,如果待删除的数据原本没有对应的索引数据(例如,待删除数据的索引列属性为空,索引表中没有对应记录),则不会触发索引表的删除操作,否则触发索引表的删除。
对用户表进行数据更新时,如果更新列是索引列,那么需要删除原索引数据,并重新插入新的索引数据;如果更新列是非索引列,但是在索引表中存在该列属性,则会触发索引表的更新操作;如果更新列在索引表中不存在(因为索引表中包含数据表的部分属性),则索引表会忽略此次更新操作。
五、数据查询过程
当用户进行单值查询,即根据索引列的某一个值来查找用户表中所有包含这个值的记录时,客户端向查询执行引擎发送查询请求,查询执行引擎向HBase索引表发起查询请求并返回查询结果,结束此次查询。
本实施例提出的非主键索引方法同时支持高效的范围查询,通过在系统中保存一个索引的值表,用来记录用户表索引列中存在的所有值并按序存储起来,来高效的支持范围查询。
通常情况下,用户表索引列经常会出现重复的值,而且值表中只保存索引列值,所以值表会比用户表小得多。进行范围查询时,查询执行引擎只需要访问一次值表,获得查询范围内的所有存在的索引列值,将范围查询转换成批量查询,针对每个索引列值发起单值查询,最后查询执行引擎汇总查询结果,返回给客户端。
具体地,范围查询具体流程如下:
1)根据客户端范围查询的条件,通过Scan操作从HBase中的值表获取范围之间所有存在的索引列值。
2)对范围内存在的索引列值,依次向相应的节点上发送单值查询请求。
3)汇总查询结果,并将汇总后的结果返回。
需要说明的是,范围查询中对值表的访问会耗费额外的时间,但由于每次范围查询只需访问一次值表,其访问代价相对较小。
如果用户表索引列Col的某索引列值为Val,那么按照字节字典顺序的定义,对任意用户表主键Key有:
Col,Val,≤Col,Val,Key;
于是,对于单值查询来说,用户需要访问的索引记录即为存储在主键“Col,Val,”之后的,且主键前缀为“Col,Val,”的记录。
另外,如果已知用户表索引列值Val1与Val2的字节字典顺序有Val1<Val2,那么对任意用户表主键Key有:
Col,Val1,Key<Col,Val2;
那么对于范围为[Val1,Val2]的查询来说,用户需要访问的索引记录即为在主键“Col,Val1,”之后的,且在主键“Col,Val2,”之前的所有记录。
当客户端查询用户表中满足21≤Age<36的所有记录时,可知按字节字典序有“a,27”<“a,21,key”<“a,36”,其中key是用户表中满足查询条件的记录主键。客户端通过创建HBase的Scan操作,并设置开始主键为“a,21”,结束主键为“a,36”。Scan操作将会返回开始键与结束键之间的所有索引记录:“a,21,Bob”、“a,30,Jerry”,从而将满足条件的所有记录找出。
总之,本发明实施例提出的基于HBase的非主键索引方法是在HBase用户表的基础上建立部分属性的索引表,同时支持高效的查询、插入、删除、更新操作,以支持在海量动态大数据上的高效非主键属性查询。
采用本发明所述方法,与现有技术相比,可以提高HBase上的非主键属性上的查询效率。我们的初步测试结果验证了我们的设计有效性。
下表为对HBase上的非主键范围查询请求,本发明实施例提供的HBase非主键索引构建与查询方法系统HiBase,在225GB(10亿条数据记录)上的初步测试数据。可以看到,对于不同大小的结果集,HBase的执行时间相差不大,因为HBase的非主键查询都需要全部遍历数据,和结果集大小无关。在结果集为0的情况下,HiBase的性能提升可以达到10万倍以上,而结果集为1155的情况下,HiBase的性能提升可以达到3000倍以上,性能提升的效果是非常明显的。
示例1,索引构建实例:
表1:索引结构
表1展示了HBase用户表和以Age数据列为索引的索引模型和索引表示例。该示例中,索引表的主键形如“a,12,Tom”,其中,a为Age数据列简短别名;12是用户表数据记录Tom的Age值,是索引列值;Tom是该记录在用户表中对应的主键。查询时通过比较索引列值定位记录。本例中,Income列的值也被保存在索引表中的value部分。
在内存中缓存的索引热点数据基于Redis的集合(Set)存储,Redis是以<key,value>格式来组织数据,如图4所示。该示例中,索引表的key形如“a,30”,其中,按“a”为用户表字段“Age”的简称,30为Age属性值,value是一个set类型的数据结构,即年龄为30的记录,格式为:{<Jerry,{Income:10000}>,<Ron,{Income:20000}>}。
示例2,范围查询实例:
参考图5,下面以年龄21至31为条件的范围查询作为示例,完整的描述范围查询流程。
1、客户端根据查询条件向值发起查询,通过HBase的Scan操作,返回值表中21与30两条索引列值,表明用户表的年龄列中在21至31之间的值仅有21与30。
2、在索引表中查询索引列值前缀为”a,21”和”a,30”的索引记录并返回结果。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (12)
1.一种HBase非主键索引构建与查询方法,其特征在于,包括:
在Hbase数据表上建立全局非主键索引;
识别针对非主键属性的查询,依据所述全局非主键索引定位到分布式内存中相应的索引节点,并向含有结果集的所述索引节点发送查询请求;
所述在Hbase数据表上建立全局非主键索引包括:
为HBase数据表中待建立索引的非主键数据列定义如下格式的索引表主键:
<用户表索引列名,用户表索引列值,用户表主键>;
其中,用户表索引列名是HBase数据表中被索引的数据列的名称;用户表索引列值是HBase数据表中被索引的列的值;用户表主键是HBase数据表中被索引的记录的主键值;
同时,保存一个索引的值表,用来记录用户表索引列中存在的所有值并按序存储起来;
所述识别针对非主键属性的查询,依据所述全局非主键索引定位到分布式内存中相应的索引节点,并向含有结果集的所述索引节点发送查询请求包括:
在进行范围查询时,访问所述值表,获得查询范围内的所有存在的索引列值;
对范围内存在的索引列值,依次向相应的索引节点发送单值查询请求;
汇总查询结果,并将汇总后的结果返回。
2.如权利要求1所述的HBase非主键索引构建与查询方法,其特征在于,在HBase数据表上建立全局非主键索引,并将其存储在HBase持久化索引存储层中。
3.如权利要求1所述的HBase非主键索引构建与查询方法,其特征在于,在分布式内存中还存储热点非主键索引;
在存储数据时,根据访问信息标记缓存中的热数据,并将热数据缓存到基于内存的热点索引缓存层中。
4.如权利要求1所述的HBase非主键索引构建与查询方法,其特征在于,HBase可以为全局非主键索引表维护全局统一的Region划分,为全局非主键索引表提供可扩展性和容错性支持。
5.如权利要求1所述的HBase非主键索引构建与查询方法,其特征在于,在全局非主键索引表中存储了HBase数据表中被频繁访问的列值。
6.如权利要求1所述的HBase非主键索引构建与查询方法,其特征在于,将访问频度大于一预定阈值的的索引数据作为热点数据缓存在内存中。
7.如权利要求3所述的HBase非主键索引构建与查询方法,其特征在于,热点非主键索引的主键格式为:
<用户表索引列名,用户表索引列值>;
其中,用户表索引列名是HBase数据表中被索引的数据列的名称;
用户表索引列值是HBase数据表中被索引的列的值。
8.如权利要求3或6所述的HBase非主键索引构建与查询方法,其特征在于,利用一致性哈希来完成热点数据在分布式内存中的存储管理。
9.一种HBase非主键索引构建与查询系统,其特征在于,包括:
索引构建管理模块,用于在Hbase数据表上建立全局非主键索引;
持久化存储管理模块,用于持久化存储所述全局非主键索引;
查询执行引擎,用于识别针对非主键属性的查询,依据所述全局非主键索引定位到分布式内存中相应的索引节点,并向含有结果集的所述索引节点发送查询请求;
所述索引构建管理模块还用于为HBase数据表中待建立索引的非主键数据列定义如下格式的索引表主键:
<用户表索引列名,用户表索引列值,用户表主键>;
其中,用户表索引列名是HBase数据表中被索引的数据列的名称;用户表索引列值是HBase数据表中被索引的列的值;用户表主键是HBase数据表中被索引的记录的主键值;
同时,保存一个索引的值表,用来记录用户表索引列中存在的所有值并按序存储起来;
所述查询执行引擎还用于在进行范围查询时,访问所述值表,获得查询范围内的所有存在的索引列值;
对范围内存在的索引列值,依次向相应的索引节点发送单值查询请求;
汇总查询结果,并将汇总后的结果返回。
10.如权利要求9所述的HBase非主键索引构建与查询系统,其特征在于,还包括:
索引内存缓存模块,用于根据访问信息标记缓存中的热数据,并将热数据缓存到基于内存的热点索引缓存层中。
11.如权利要求9所述的HBase非主键索引构建与查询系统,其特征在于,所述索引构建管理模块利用HBase提供的Coprocessor接口实现对于流式数据的索引构建。
12.如权利要求9所述的HBase非主键索引构建与查询系统,其特征在于,所述索引构建管理模块利用Hadoop MapReduce程序来并行化执行静态数据的索引构建。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410658614.9A CN104850572B (zh) | 2014-11-18 | 2014-11-18 | HBase非主键索引构建与查询方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410658614.9A CN104850572B (zh) | 2014-11-18 | 2014-11-18 | HBase非主键索引构建与查询方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104850572A CN104850572A (zh) | 2015-08-19 |
CN104850572B true CN104850572B (zh) | 2018-11-23 |
Family
ID=53850218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410658614.9A Active CN104850572B (zh) | 2014-11-18 | 2014-11-18 | HBase非主键索引构建与查询方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104850572B (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159845A (zh) * | 2015-09-07 | 2015-12-16 | 四川神琥科技有限公司 | 存储器读取方法 |
CN105138673A (zh) * | 2015-09-08 | 2015-12-09 | 浙江风向标科技有限公司 | 一种基于物联网的海量存储系统及存储方法 |
CN105426442B (zh) * | 2015-11-06 | 2020-01-14 | 广东湛数大数据有限公司 | 一种基于分布式数据库消息数据管理方法及系统 |
CN105608126A (zh) * | 2015-12-16 | 2016-05-25 | 成都创智云科技股份有限公司 | 一种建立海量数据库二级索引的方法和装置 |
CN105740472A (zh) * | 2016-03-14 | 2016-07-06 | 中国科学院计算技术研究所 | 一种分布式实时全文检索方法及系统 |
CN107562762B (zh) * | 2016-07-01 | 2020-10-27 | 中国联合网络通信集团有限公司 | 数据索引构建方法及装置 |
CN107784030B (zh) | 2016-08-31 | 2020-04-28 | 华为技术有限公司 | 一种处理连接查询的方法及装置 |
CN106570126A (zh) * | 2016-11-02 | 2017-04-19 | 北京集奥聚合科技有限公司 | 一种收集HBase热点数据块信息的方法及系统 |
CN106649568B (zh) * | 2016-11-15 | 2020-11-03 | 中国银联股份有限公司 | 一种数据库检索方法及装置 |
CN110019287B (zh) * | 2017-07-20 | 2021-09-14 | 华为技术有限公司 | 执行结构化查询语言sql指令的方法和装置 |
CN110019336B (zh) * | 2017-10-30 | 2021-04-30 | 北京京东尚科信息技术有限公司 | 一种查询数据的方法和装置 |
CN109947787A (zh) * | 2017-10-30 | 2019-06-28 | 阿里巴巴集团控股有限公司 | 一种数据分层存储、分层查询方法及装置 |
CN107888686B (zh) * | 2017-11-14 | 2020-10-02 | 西南医科大学 | 一种位于HBase客户端的用户数据有效性验证方法 |
CN108124012A (zh) * | 2017-12-21 | 2018-06-05 | 中通服公众信息产业股份有限公司 | 一种基于哈希算法的分布式缓存计算方法 |
CN110737692A (zh) * | 2018-07-19 | 2020-01-31 | 杭州海康威视数字技术股份有限公司 | 一种检索数据的方法、建立索引库的方法及装置 |
CN109284351A (zh) * | 2018-08-14 | 2019-01-29 | 青海大学 | 一种基于HBase数据库的数据查询方法 |
CN109063219A (zh) * | 2018-10-30 | 2018-12-21 | 深圳市海能通信股份有限公司 | 一种大数据结构化查询系统 |
CN109582643A (zh) * | 2018-11-20 | 2019-04-05 | 中国石油大学(华东) | 一种基于HBase的实时动态数据管理系统 |
CN109726219A (zh) * | 2018-11-27 | 2019-05-07 | 中科恒运股份有限公司 | 数据查询的方法及终端设备 |
CN109947896A (zh) * | 2019-03-11 | 2019-06-28 | 浙江邦盛科技有限公司 | 一种轨道交通非结构化流数据实时存储方法 |
CN110083601B (zh) * | 2019-04-04 | 2021-11-30 | 中国科学院计算技术研究所 | 面向键值存储系统的索引树构建方法及系统 |
CN110069500B (zh) * | 2019-04-23 | 2022-08-26 | 东华大学 | 一种非关系型数据库动态混合索引方法 |
CN110110234B (zh) * | 2019-05-13 | 2020-10-16 | 重庆天蓬网络有限公司 | 一种大数据实时搜索系统和方法 |
CN110162528A (zh) * | 2019-05-24 | 2019-08-23 | 安徽芃睿科技有限公司 | 海量大数据检索方法及系统 |
CN113032479A (zh) * | 2019-12-24 | 2021-06-25 | 上海昂创信息技术有限公司 | 一种HBase非主键索引的方法及HBase系统 |
CN111459945B (zh) * | 2020-04-07 | 2023-11-10 | 中科曙光(南京)计算技术有限公司 | 一种基于HBase的分层式索引查询方法 |
CN112416925B (zh) * | 2020-11-02 | 2024-04-09 | 浙商银行股份有限公司 | 基于有序分布式索引结构的查询方法和分布式数据库系统 |
CN115328916A (zh) * | 2022-08-16 | 2022-11-11 | 中国电信股份有限公司 | 二级索引表的构建方法、装置、设备以及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102750356A (zh) * | 2012-06-11 | 2012-10-24 | 清华大学 | 一种键值库辅助索引的构建与管理方法 |
CN103020204A (zh) * | 2012-12-05 | 2013-04-03 | 北京普泽天玑数据技术有限公司 | 一种对分布式顺序表进行多维区间查询的方法及其系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9355109B2 (en) * | 2010-06-11 | 2016-05-31 | The Research Foundation For The State University Of New York | Multi-tier caching |
US9323767B2 (en) * | 2012-10-01 | 2016-04-26 | Longsand Limited | Performance and scalability in an intelligent data operating layer system |
-
2014
- 2014-11-18 CN CN201410658614.9A patent/CN104850572B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102750356A (zh) * | 2012-06-11 | 2012-10-24 | 清华大学 | 一种键值库辅助索引的构建与管理方法 |
CN103020204A (zh) * | 2012-12-05 | 2013-04-03 | 北京普泽天玑数据技术有限公司 | 一种对分布式顺序表进行多维区间查询的方法及其系统 |
Non-Patent Citations (1)
Title |
---|
基于HBase的海量数据实时查询系统设计与实现;卓海艺;《中国优秀硕士学位论文全文数据库 信息科技辑》;20131115;摘要,论文正文第22-39页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104850572A (zh) | 2015-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104850572B (zh) | HBase非主键索引构建与查询方法及其系统 | |
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
CN103020204B (zh) | 一种对分布式顺序表进行多维区间查询的方法及其系统 | |
CN107423422B (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
CN105487818B (zh) | 针对云存储系统中重复冗余数据的高效去重方法 | |
US8930332B2 (en) | Method and system for partitioning search indexes | |
US9430390B2 (en) | Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications | |
US6438562B1 (en) | Parallel index maintenance | |
US9149054B2 (en) | Prefix-based leaf node storage for database system | |
US20160267132A1 (en) | Abstraction layer between a database query engine and a distributed file system | |
CN110162528A (zh) | 海量大数据检索方法及系统 | |
KR101672901B1 (ko) | 분산 파일 시스템에서 소형 파일에 대한 접근성 향상을 위한 캐시 관리 시스템 | |
US9600501B1 (en) | Transmitting and receiving data between databases with different database processing capabilities | |
CN103530387A (zh) | 一种hdfs针对小文件的改进方法 | |
US11216516B2 (en) | Method and system for scalable search using microservice and cloud based search with records indexes | |
CN110321325A (zh) | 文件索引节点查找方法、终端、服务器、系统及存储介质 | |
CN102867070A (zh) | 更新key-value分布式存储系统缓存的方法 | |
CN106716409A (zh) | 基于查询需求从行存储数据库自适应地构建和更新列存储数据库的方法和系统 | |
Pirzadeh et al. | Performance evaluation of range queries in key value stores | |
US9262511B2 (en) | System and method for indexing streams containing unstructured text data | |
CN109033292A (zh) | 一种数据库分布式缓存系统及方法 | |
CN103353901B (zh) | 基于Hadoop分布式文件系统的表数据的有序管理方法以及系统 | |
CN116541427B (zh) | 数据查询方法、装置、设备及存储介质 | |
CN101789027A (zh) | 一种基于dbms的元数据管理方法和元数据服务器 | |
CN106484694B (zh) | 基于分布式数据库的全文搜索方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220112 Address after: 100744 602, floor 6, building 6, courtyard 10, KEGU 1st Street, Beijing Economic and Technological Development Zone, Daxing District, Beijing (Yizhuang group, high-end industrial area of Beijing Pilot Free Trade Zone) Patentee after: Jinzhuan Xinke Co.,Ltd. Address before: 518057 Ministry of justice, Zhongxing building, South Science and technology road, Nanshan District hi tech Industrial Park, Shenzhen, Guangdong Patentee before: ZTE Corp. |