CN105404676B - 一种基于HFile的HBase二级索引更新方法及系统 - Google Patents

一种基于HFile的HBase二级索引更新方法及系统 Download PDF

Info

Publication number
CN105404676B
CN105404676B CN201510813149.6A CN201510813149A CN105404676B CN 105404676 B CN105404676 B CN 105404676B CN 201510813149 A CN201510813149 A CN 201510813149A CN 105404676 B CN105404676 B CN 105404676B
Authority
CN
China
Prior art keywords
hfile
hbase
files
index
data
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
CN201510813149.6A
Other languages
English (en)
Other versions
CN105404676A (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.)
Institute of Computing Technology of CAS
Original Assignee
Institute of Computing Technology of CAS
Filing date
Publication date
Application filed by Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CN201510813149.6A priority Critical patent/CN105404676B/zh
Publication of CN105404676A publication Critical patent/CN105404676A/zh
Application granted granted Critical
Publication of CN105404676B publication Critical patent/CN105404676B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种基于HFile的HBase二级索引更新方法及系统,该方法包括:解析步骤,监视HBase数据库刷新HFile文件的过程,当针对目标索引列产生了用户操作并生成有HFile文件时,解析该HFile文件并据以更新二级索引表;延迟步骤,在到达HFile文件的compaction操作的启动时间点时,判断该compaction操作所对应的HFile文件是否已经执行该解析该HFile文件的步骤,如果否,延迟该compaction操作的启动时间点,如果是,执行该compaction操作。本发明选择基于HBase文件存储中的HFile这一粒度层次来确定索引更新,不需要大幅度修改HBase源码,不需要维护多余的源表信息,在实现上与用户数据操作异步,不影响用户的时间体验,将索引数据更新维护与源表数据操作解耦。提高了HBase源表数据与二级索引表的同步程度。

Description

一种基于HFile的HBase二级索引更新方法及系统
技术领域
本发明涉及大数据存储与处理中SQL解析以及信息索引和搜索领域,特别是涉及一种基于HFile的HBase二级索引更新方法及系统。
背景技术
在数据高速发展的时代,分布式体系成为了很重要的角色。在大数据发展的背景下,分布式集群,分布式数据库,分布式文件系统都成为受人们关注的焦点。在这个动力趋势下,Hadoop集群成为较成熟的分布式系统。分布式数据库HBase在Hadoop生态系统中正在不断完善,HBase不同于传统的数据库,它是一个适用于非结构化数据存储的数据库,具有高扩展性、列存储、可伸缩、能实时读写大数据的特点,因此被很多大公司使用,HBase数据库依据有很好的易用性及键值的灵活处理得到广泛的欢迎。
和传统的基于行的关系型的数据库不同,HBase应用基于列的数据存储模型,准确的说,HBase是一种稀疏的面向数据的列存储的分布式数据库,HBase源数据表的RowKey按照字典排序,HBase源数据表的Region按照HBase的RowKey设置的分割点进行分片,通过这种方式实现数据的组织。由此,HBase数据库中的RowKey实际上充当着数据表的一级索引,基于索引检索数据只能单纯地依靠RowKey。为了支持多条件查询,开发者需要将所有可能作为查询条件的字段拼接到RowKey中,无论怎么设计,单一的RowKey固有的局限性决定了它不能有效的支持多条件查询。RowKey只能针对条件中含有其首字段的查询给予令人满意的性能支持,在查询其他字段时,表现就差强人意了。在极端情况下某些字段的查询性能可能会退化为全表扫描的水平,这是因为字段在RowKey中的地位是不等价的,它们在RowKey中的排位决定了它们被检索时的性能表现,排序越靠前的字段在查询中越具有优势,特别是首位字段具有特别的先发优势,如果查询中包含首位字段,检索时就可以通过首位字段的值确定RowKey的前缀部分,从而大幅度地收窄检索区间,如果不包含则只能在全体数据的RowKey上逐一查找,由此可以想见两者在性能上的差距。
除此之外,单一的依靠RowKey来支持定位目标数据已经远远不能满足实际工作中的需求,当用户的搜索目标列并不仅局限于主键RowKey的信息时,此时需要找到所需要的目标数据往往需要进行全表扫描,而全表扫描所需要的时间开销与表格的大小成正比,这对用户来说,通常是无法忍受。因此如何快速的定位到目标数据行成为HBase在实际检索应用中的一个很大的功能缺陷和性能瓶颈。此时需要使用到一种特殊的索引,能在给定的列中存储有关重要的词及位置的信息,使用这些信息可以快速进行全文查询,搜索包括特定词或词组的行,实现全文索引功能。为了使用全文索引功能,目前来说,通常是使用索引引擎对HBase源数据表中的数据建立二级索引表,再通过索引搜索功能在二级索引表中得到对应的HBase主键信息,进而定位到目标数据行,也就是说,当HBase中存储的源数据表需要更新时,譬如,用户删除/增加/修改数据,所对应的二级索引的数据也应该相应的发生变化。
如何根据HBase源数据表的变化来更新二级索引表目前存在几种不同的方法,这些方法从更新时机上主要分为实时更新和非实时增量更新,从更新方法上来说,主要有基于HBase提供的coprocessor机制以及基于HBase的replication机制,这两种方法的基本原理如下。
基于coprocessor机制,其核心原理是修改HBase的coprocessor代码框架对应的post put和post delete函数,增加对应的处理。参照图1为coprocessor机制的原理示意图。
当用户利用HBase客户端对数据进行一个操作后,对应产生一条修改数据Data,该操作包括增、删或改,随后,除了依照常规将该修改数据Data写入一HBase源数据表之外,还额外将该修改数据Data写入一个指定的表中,这个表称为操作信息记录表。该操作信息记录表由HBase进行维护。HBase还设置有一个系统定时器,利用该系统定时器周期性的启动更新过程。当该系统定时器指示达到一更新时间点时,利用一索引引擎读取该操作信息记录表中的信息,该索引引擎据以更新二级索引表中的数据,由此来同步二级索引表与HBase源数据表。
但是,这一方法的不足之处在于,当用户进行操作之后,需多写入一份数据在该操作信息记录表中,并由HBase对表中数据进行维护。也就是说,用户每次进行操作后,都需额外进行一次写操作,进而多出了一份额外的写开销,这样增加了用户操作数据的负担。并且,对于HBase客户端而言,需要等待针对HBase源数据表、操作信息记录表的两次写操作都成功,分别返回成功消息后,才能继续执行后续的逻辑操作,特别是才能进行下一次操作以提供下一条修改数据Data,使得用户在两次操作之间需要等待。这等待的过程增加了时间开销,同时也承担一定的风险。风险在于额外的写操作可能发生失效或者出错,而HBase在针对该失效或者出错进行处置的过程中,用户依然需要等待,无法利用HBase客户端进行后续操作,可见,用户每次更新数据(增/删/改)时,都需要额外的时间开销,这在很大程度上,影响用户体验。
基于replication机制,其核心机制利用了HBase的replication功能的基本原理,使用到主集群的HLog。参照图2为replication机制的原理示意图。
当用户利用HBase客户端对数据进行一个操作后,对应产生一条修改数据Data,则该修改数据Data被直接写入HLog。HBase客户端可以不做等待的持续进行操作,产生多条修改数据Data,依次写入HLog。并且,每条修改数据Data还保留一份于内存中,当内存中具有多条修改数据Data并达到HFile的容量要求时,形成一个HFile,并立即利用该HFile来更新HBase源数据表。该HLog位于磁盘中,故而,即使遭遇断电等中断操作,该修改数据依然存在,能够保证数据处理的准确性。HBase实时读取HLog中的数据,然后发送到从集群中去,根据发送的数据,使用索引引擎来读取,进而更新现有的二级索引表,由此来同步索引数据与原表数据。另外,HBase还实时将HLog中的数据发送至一HBase源数据表的备份表中进行存储。
但是,这一方法的不足之处在于,首先replication功能目前只是HBase的一个实验性功能,且HBase不同版本之间该功能实现差别很大,低级版本需要额外过滤数据操作,进而效率较低,另外,这种更新方案相当于修改了HBase已有的replication机制,即需要修改HBase的源代码,无法确定是否有边际副效应。
发明内容
本发明解决的技术问题在于,基于HBase文件存储中的HFile这一粒度层次来确定索引更新,降低用户的等待时间,改善用户体验。
进一步的,保证了二级索引表与HBase源数据表的一致性,确保了解析HFile文件的完整性。
进一步的,不需要大幅度修改HBase源码,没有额外的写操作。
更进一步的,改善基于HBase数据库的复杂查询,减少数据查询时间,保证全文索引功能的实现。
本发明公开了一种基于HFile的HBase二级索引更新方法,该方法包括:
解析步骤,监视HBase数据库刷新HFile文件的过程,当针对目标索引列产生了用户操作并生成有HFile文件时,解析该HFile文件并据以更新二级索引表;
延迟步骤,在到达HFile文件的compaction操作的启动时间点时,判断该compaction操作所对应的HFile文件是否已经执行该解析该HFile文件的步骤,如果否,延迟该compaction操作的启动时间点,如果是,执行该compaction操作。
所述的方法还包括:针对已解析的HFile文件,在其元信息中增加已解析标志位。
该目标索引列是根据该HBase源数据表中的索引元数据信息而确定。
该解析该HFile文件并据以更新二级索引表的步骤进一步包括:读取该HFile文件的KV对作为更新信息,调用一索引引擎并利用该更新信息更新该二级索引表。
所述的方法还包括重复执行该延迟步骤,直到不再产生该HFile文件。
本发明还公开了一种基于HFile的HBase二级索引更新系统,该系统包括:
解析单元,用于监视HBase数据库刷新HFile文件的过程,当针对目标索引列产生了用户操作并生成有HFile文件时,解析该HFile文件并据以更新二级索引表;
延迟单元,在到达HFile文件的compaction操作的启动时间点时,判断该compaction操作所对应的HFile文件是否已经执行该解析该HFile文件的步骤,如果否,延迟该compaction操作的启动时间点,如果是,执行该compaction操作。
该系统还包括标志位增加模块,用于针对已解析的HFile文件,在其元信息中增加已解析标志位。
该目标索引列是根据该HBase源数据表中的索引元数据信息而确定。
该解析单元进一步包括更新模块,用于读取该HFile文件的KV对作为更新信息,调用一索引引擎并利用该更新信息更新该二级索引表。
该系统还包括循环模块,用于重复调用该延迟单元,直到不再产生该HFile文件。
本发明实现的技术效果在于,通过利用HBase自身存储机制所具有的HFile文件,避免了用户每操作一次均需要等待该操作更新二级索引表完毕才能继续操作的缺陷,同时避免了多次的写操作。另外,本发明通过索引元数据信息,当新生成需要跟踪的HFile文件时,才对这些文件进行解析,并将解析结果发送到索引引擎以进行更新,以此最终达到索引更新目的。另外,本发明的二级索引更新方法,可以改善基于HBase数据库的复杂查询,减少数据查询时间,保证全文索引功能的实现。并且,本发明是根据HBase的架构特点,专门选择了基于HBase文件存储中的HFile这一粒度层次来确定索引更新的方法,而放弃了对Data这一粒度的处理方式。本发明的方法不需要大幅度修改HBase源码,也不需要维护多余的源表信息,由于在实现上与用户数据操作异步,所以不影响用户的整体数据维护时间体验,将索引数据更新维护与源表数据操作在很大程度上解耦。提高了HBase源表数据与二级索引表的同步程度。
附图说明
图1为coprocessor机制的原理示意图。
图2为replication机制的原理示意图。
图3为一种基于HFile的HBase二级索引更新方法的流程图。
图4A所示为HFile的结构示意图.
图4B为HFile中的Data字段的结构示意图。
具体实施方式
以下结合实施例,详细说明本发明的技术方案的实现过程,且不做为对本发明的限制。
为了解决以上问题,本发明公开了一种基于HFile的HBase二级索引更新方法,如图3所示为该方法的流程图。
步骤1,提取HBase源数据表中的索引元数据信息,根据该索引元数据信息解析得到目标索引列。
该HBase源数据表中除以表格形式存储有数据之外,还设置有索引元数据信息,该索引元数据信息用于标识HBase源数据表中哪些行、哪些列的数据需要建立索引,便于后续的查询,也就是约定了查询的范围。
则该步骤1需加载HBase源数据表中的索引元数据信息至内存中,进而解析得到目标索引列。
步骤2,监视HBase数据库刷新HFile文件的过程,当针对目标索引列产生了用户操作并生成有HFile文件时,解析该HFile文件并据以更新二级索引表。
用户通过HBase客户端随时进行操作,触发HBase产生put/delete操作,进而随时产生修改数据Data,每条修改数据Data随时写入内存中,当达到HFile的容量要求时,刷新形成一个HFile,也就是说,多条修改数据Data形成一个HFile。且用户在两次操作之间无需等待,随时产生的修改数据Data先在内存中进行缓存以生成HFile,并未直接用以更新操作信息记录表,故而降低了用户的等待时长。
并且,当刷新形成一个新的HFile文件时,判断当前的该HFile文件是否包括有针对目标索引列的修改数据,如果否,重新执行步骤2,继续监视HBase数据库刷新HFile文件的过程,如果是,调用HFile解析接口解析HFile,读取HFile中对应的KV对,根据该KV对来获得索引更新值,触发索引引擎根据该索引更新值更新二级索引表,继续执行步骤2,直到系统设定的退出点或不再创建新的HFile。该对应的KV对,即是对应了索引目标列的修改数据的KV对。如图4A所示为HFile的结构示意图,图4B为HFile中的Data字段的结构示意图。HFile中包括多个Data字段,而每个Data字段包括有Key值字段和Value值字段。Key值字段中记载了HBase源数据表中的一个位置信息,即行信息与列信息,Value值字段记载了该行该列所对应的数值,也就是用户进行了操作后,该行该列目前所对应的数值。可见,通过该方法,可以跟踪定位到需要解析的新生成的HFile,并据以进行索引更新。
在步骤2中,针对已解析的HFile文件,还需在其元信息中增加已解析标志位。例如在图4A中的File Info的元信息中增加已解析标志位,以确保没有重复解析HFile内容,确保执行了compaction操作的HFile文件都已经解析过了。这个标志位在执行过compaction操作后的文件继续保留。
在执行步骤2的同时,还执行步骤3,实时判断是否到达当前处理的HFile文件的compaction操作的启动时间点时,如果否,继续执行步骤3中的该实时判断的步骤,如果是,判断该compaction操作所对应的HFile文件是否已经执行完毕该步骤2,即是否解析完毕,如果否,延迟该compaction操作的启动时间点,继续执行步骤3中的该实时判断的步骤,直到步骤2中针对该HFile的解析完毕,所需kv对读取完毕,如果是,执行该compaction操作。
compaction操作是对HFile文件中针对同一行同一列但时间戳不同的Data进行融合的操作,即,融合后仅保留针对同一行同一列但时间戳在后的Data。
通过步骤3可以保证步骤2中的二级索引表与HBase源数据表的一致性,确保了解析HFile文件的完整性,也避免了在compaction操作中被融合掉的数据,出现在二级索引表中。
该compaction操作主要由以下四个原因启动:a.Memstoreflush时;b.HRegionServer定期做Compaction Checker时;c.HBaseAdmin客户端发起请求;d.CompactTool发起时。
上述索引引擎可以采用基于lucene的索引引擎。上述步骤2需通过修改HBase的对应的数据刷写coprocessor来实现,并在postFlush中利用HFile读取接口读取该kv对。步骤3需要通过修改HBase的coprocessor代码中的preCompact函数来实现。
本发明的目的是克服了现有技术中,在HBase二级索引更新过程中所出现的多余写盘开销以及HBase源代码耦合度较高等问题,提出了一种基于HFile解析的HBase二级索引更新方法。
本发明通过利用HBase自身存储机制所具有的HFile文件,避免了用户每操作一次均需要等待该操作更新二级索引表完毕才能继续操作的缺陷,同时避免了多次的写操作。另外,本发明通过索引元数据信息,当新生成需要跟踪的HFile文件时,才对这些文件进行解析,并将解析结果发送到索引引擎以进行更新,以此最终达到索引更新目的。
另外,本发明的二级索引更新方法,可以改善基于HBase数据库的复杂查询,减少数据查询时间,保证全文索引功能的实现。
并且,本发明是根据HBase的架构特点,专门选择了基于HBase文件存储中的HFile这一粒度层次来确定索引更新的方法,而放弃了对Data这一粒度的处理方式。本发明的方法不需要大幅度修改HBase源码,也不需要维护多余的源表信息,由于在实现上与用户数据操作异步,所以不影响用户的整体数据维护时间体验,将索引数据更新维护与源表数据操作在很大程度上解耦。提高了HBase源表数据与二级索引表的同步程度。
上述仅为对本发明的技术方案的描述,不做为对本发明的限制,凡依据后附权利要求书对本发明所做的等效变换或明显变型,均属于本发明的保护范围内。

Claims (10)

1.一种基于HFile的HBase二级索引更新方法,其特征在于,该方法包括:
解析步骤,监视HBase数据库刷新HFile文件的过程,当针对目标索引列产生了用户操作并生成有HFile文件时,解析该HFile文件并据以更新二级索引表;
延迟步骤,在到达HFile文件的compaction操作的启动时间点时,判断该compaction操作所对应的HFile文件是否已经执行该解析该HFile文件的步骤,如果否,延迟该compaction操作的启动时间点,如果是,执行该compaction操作;
其中compaction操作是指对HFile文件中针对同一行同一列但时间戳不同的数据进行融合;二级索引表中内容为HBase中源数据表的二级索引信息,通过索引搜索功能在二级索引表中得到对应的HBase主键信息,进而定位到目标数据行。
2.如权利要求1所述的方法,其特征在于,还包括:针对已解析的HFile文件,在其元信息中增加已解析标志位。
3.如权利要求1所述的方法,其特征在于,该目标索引列是根据该HBase源数据表中的索引元数据信息而确定。
4.如权利要求1所述的方法,其特征在于,该解析该HFile文件并据以更新二级索引表的步骤进一步包括:
读取该HFile文件的KV对作为更新信息,调用一索引引擎并利用该更新信息更新该二级索引表。
5.如权利要求1所述的方法,其特征在于,重复执行该延迟步骤,直到不再产生该HFile文件。
6.一种基于HFile的HBase二级索引更新系统,其特征在于,该系统包括:
解析单元,用于监视HBase数据库刷新HFile文件的过程,当针对目标索引列产生了用户操作并生成有HFile文件时,解析该HFile文件并据以更新二级索引表;
延迟单元,在到达HFile文件的compaction操作的启动时间点时,判断该compaction操作所对应的HFile文件是否已经执行该解析该HFile文件的步骤,如果否,延迟该compaction操作的启动时间点,如果是,执行该compaction操作;
其中compaction操作是指对HFile文件中针对同一行同一列但时间戳不同的数据进行融合;二级索引表中内容为HBase中源数据表的二级索引信息,通过索引搜索功能在二级索引表中得到对应的HBase主键信息,进而定位到目标数据行。
7.如权利要求6所述的系统,其特征在于,该系统还包括标志位增加模块,用于针对已解析的HFile文件,在其元信息中增加已解析标志位。
8.如权利要求6所述的系统,其特征在于,该目标索引列是根据该HBase源数据表中的索引元数据信息而确定。
9.如权利要求6所述的系统,其特征在于,该解析单元进一步包括更新模块,用于读取该HFile文件的KV对作为更新信息,调用一索引引擎并利用该更新信息更新该二级索引表。
10.如权利要求6所述的系统,其特征在于,该系统还包括循环模块,用于重复调用该延迟单元,直到不再产生该HFile文件。
CN201510813149.6A 2015-11-20 一种基于HFile的HBase二级索引更新方法及系统 Active CN105404676B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510813149.6A CN105404676B (zh) 2015-11-20 一种基于HFile的HBase二级索引更新方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510813149.6A CN105404676B (zh) 2015-11-20 一种基于HFile的HBase二级索引更新方法及系统

Publications (2)

Publication Number Publication Date
CN105404676A CN105404676A (zh) 2016-03-16
CN105404676B true CN105404676B (zh) 2018-08-31

Family

ID=

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1705934A (zh) * 2002-10-17 2005-12-07 松下电器产业株式会社 文件更新设备
CN103177117A (zh) * 2013-04-08 2013-06-26 北京奇虎科技有限公司 信息索引系统及信息索引的更新方法
CN104112013A (zh) * 2014-07-17 2014-10-22 浪潮(北京)电子信息产业有限公司 HBase二级索引方法及装置
CN104217011A (zh) * 2014-09-19 2014-12-17 浪潮(北京)电子信息产业有限公司 HBase二级索引表的查询方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1705934A (zh) * 2002-10-17 2005-12-07 松下电器产业株式会社 文件更新设备
CN103177117A (zh) * 2013-04-08 2013-06-26 北京奇虎科技有限公司 信息索引系统及信息索引的更新方法
CN104112013A (zh) * 2014-07-17 2014-10-22 浪潮(北京)电子信息产业有限公司 HBase二级索引方法及装置
CN104217011A (zh) * 2014-09-19 2014-12-17 浪潮(北京)电子信息产业有限公司 HBase二级索引表的查询方法和装置

Similar Documents

Publication Publication Date Title
US10019284B2 (en) Method for performing transactions on data and a transactional database
CN102521405B (zh) 支持高速加载的海量结构化数据存储、查询方法和系统
CN103020204B (zh) 一种对分布式顺序表进行多维区间查询的方法及其系统
CN102521406B (zh) 海量结构化数据复杂查询任务的分布式查询方法和系统
CN105373541B (zh) 数据库的数据操作请求的处理方法和系统
CN109947796B (zh) 一种分布式数据库系统查询中间结果集的缓存方法
CN109189852A (zh) 一种数据同步的方法及用于数据同步的装置
CN103678491A (zh) 一种基于Hadoop中小文件优化和倒排索引的方法
CN107506464A (zh) 一种基于ES实现HBase二级索引的方法
CN113094449B (zh) 基于分布式键值库的大规模知识图谱存储方法
CN114661832A (zh) 一种基于数据质量的多模态异构数据存储方法及系统
US8396858B2 (en) Adding entries to an index based on use of the index
KR20110133909A (ko) 모든 자연어 표현의 각각의 의미마다 별도의 용어를 동적으로 생성하는 방법 및 이를 기반으로 하는 사전 관리기,문서작성기, 용어 주석기, 검색 시스템 및 문서정보체계 구축장치
CN104794567B (zh) 一种基于HBase的传染病数据管理方法
Cioloca et al. Increasing database performance using indexes
CN105404676B (zh) 一种基于HFile的HBase二级索引更新方法及系统
CN113918535A (zh) 一种数据读取方法、装置、设备及存储介质
US11803543B2 (en) Lossless switching between search grammars
CN114385577A (zh) 一种分布式文件系统
Yan et al. RDF knowledge graph keyword type search using frequent patterns
Lu et al. Research and implementation of big data system of social media
Qi et al. Distributed structured database system HugeTable
CN117131023B (zh) 数据表处理方法、装置、计算机设备和可读存储介质
Pirzadeh On the performance evaluation of big data systems
Dou et al. Efficient Optimized Strategy of Big Data Retrieval

Legal Events

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