一种基于HBase的更新增量索引的方法

文档序号:6536294阅读:959来源:国知局
一种基于HBase的更新增量索引的方法
【专利摘要】本发明公开了一种基于HBase的更新增量索引的方法,包括以下步骤:通过待更新文档D的标识符,从HBase索引库中获取待更新文档D的历史内容C0;解析历史内容C0,获取其全部术语的前置表FT0;解析待更新文档D的当前内容C1,获取其全部术语的前置表FT1;遍历前置表FT1,对FT1中每个术语t,结合FT0进行判断,修改前置表FT1和FT0的内容,将需要删除的术语保留在前置表FT0中,将需要增加或更新的术语保留在FT1中;将FT0中的所有术语t从HBase索引库中删除;将FT1中的所有术语提交到HBase索引库进行更新;将待更新文档D的内容替换为C1,完成待更新文档的索引更新。
【专利说明】—种基于HBase的更新增量索引的方法
【技术领域】
[0001]本发明涉及一种在HBase (—个分布式的、面向列的开源数据库,支持百万列上亿行数据的存储)基础上对增量索引内容进行更新的方法,主要解决目前对增量索引的更新效率低的问题。
【背景技术】
[0002]随着互联网技术的发展,信息系统的中存储的文本数量日益庞大,为了从中查找所需信息,必须构建索引。当需要索引的数据量极大时,单个计算机提供的存储容量无法满足索引的存储需求,所以必须使用分布式的计算与存储环境满足需求。一种解决方法是采用基于HBase的倒排索引技术实现对不断增加的数据构建增量索引,另外,随着时间的积累,部分被索引的数据会发生变化,需要将增量索引系统中的索引数据相应的进行更新。因此,如何有效的对不断变化的内容更新其增量索引,满足用户在检索时对索引内容及时性的需求,成了亟待解决的难题。
[0003]针对如何有效地构建数据索引以及存储和检索,以下专利和论文提供了不同的技术方案:
[0004]文献1.一种全文检索系统的索引在线更新方法(200610112800.8);
[0005]文 献 2.Antonopoulos P, Konstantinou I, Tsoumakos D, et al.EfficientUpdates for Web-Scale Indexes over the Cloud[C]:1EEE, 2012:135-142.;
[0006]文献I将索引库按照文档变更的频繁程度划分为主索引库与辅助索引库两部分,其中主索引库由占绝大多数的很少改变的文档组成,辅助索引库由经常改变的少数文档组成。在更新索引时,不直接对主索引库进行更新,而是将索引的新增、删除与更新操作保存在辅助索引库中,当辅助索引库的文件大小或数量超过预先设置的阈值时,批量的将辅助索引库中的所有索引操作合并到主索引库中,或者按照系统的繁忙程度,在系统空闲时进行合并操作。采用这种方式,可以避免索引更新操作对主索引库大量读写造成的性能下降,保证索引服务持续可用。
[0007]文献2通过分析索引更新的操作的细节,发现更新索引时,其操作具有明显的局部性,不用将一个文档的所有术语都进行更新,只需要对发生变化的术语进行更新即可,避免了不必要的索引删除与新增操作。而发现变化的术语更新的步骤可以通过对比待更新文档的新旧前置表实现,不需要对文档原文进行遍历对比。采用这种方式,可以将索引更新的细节操作数量显著降低,提高索引更新的效率。
[0008]以上文献所述方法主要存在以下问题:文献I没有考虑待更新文档数据持续增加时,辅助索引库占用的存储空间将会显著提升,占用大量额外的存储空间,当索引数据的规模极大时,辅助索引库受限于单机的内存容量,无法保存更多索引更新;当总索引数量超过一定程度时,合并索引的效率会发生显著下降,不适应当前海量数据资源的索引更新;索引的更新过程的一段时期内,同时存在两个不同的索引版本,如辅助索引库发生异常,则会丢失索引更新。文献2在实现索引更新时,需要保存待索引文档的前置表,而保存前置表需要占用和索引同样大小的存储空间,造成存储浪费;而从索引中重新生成前置表,则需要扫描整个索引库,十分耗费时间。

【发明内容】

[0009]本发明的目的在于提出一种新的可提高更新效率的索引更新方法,以解决【背景技术】的方法中不适合处理海量数据索引、额外占用大量存储空间以及整体更新速度慢的问题,。
[0010]为了达到以上目的,本发明是采取如下技术方案予以实现的:
[0011]一种基于HBase的更新增量索引的方法,其特征在于,包括下述步骤:
[0012](I)从HBase索引库中获取待更新文档D的历史内容C。
[0013]待更新文档D的历史内容在HBase索引库中已经存在,包括其内容文本与内容文本的索引,通过待更新文档D的标识符,从HBase索引库中读取其历史内容;
[0014](2)解析待更新文档D的历史内容Ctl,获取Ctl的前置表FTtl ;
[0015](3)解析待更新文档D的当前内容C1,获取C1的前置表FT1 ;
[0016](4)遍历C1的前置表FT1,对FT1中每个术语t,结合FTtl进行判断,修改前置表FTi和FTtl的内容,具体方法如下:
[0017]判断FTtl中是否存在术语t,分别进行如下处理:
[0018]a、如果不存在,则继续判断FT1的下一个术语;
[0019]b、如果存在,则判断该术语t的出现频率出现位置与FTtl中术语t的出现频率出现位置是否都相同,分别进行如下处理:
[0020]1、如果都相同,则将该术语t以及t的出现频率出现位置从FTjP FT1中删除;
[0021]i1、如果任一不相同,则将该术语t以及出现频率出现位置从FTtl中删除;
[0022](5)将FTtl中的所有术语t从HBase索引库中删除
[0023]步骤(4)执行完毕后,FT0中的全部术语都是待更新文档D的当前内容C1中不再存在的术语,所以更新时应从HBase索引库中删除这些术语对应的索引信息,在HBase索引库中,以FTtl中的术语t作为主键,以待索引文档D的标识符作为列字段,在HBase索引库中进行查询,将对应位置的索引信息删除;
[0024](6)将FT1中的所有术语提交到HBase索引库进行更新
[0025]步骤(4)执行完毕后,FT1中的全部术语都是待更新文档D的当前内容C1对比历史内容Ctl发生变化的术语,所以更新时应将这些术语的信息提交给HBase索引库,更新对应术语的索引信息,更新索引时,在HBase索引库中,以FT1中的术语t作为主键,以待索引文档D作为列字段在HBase索引库中进行查询,将对应位置的索引信息替换为FT1中术语t的出现频率与出现位置;
[0026](7)将待更新文档D的内容替换为C:。
[0027]上述方法中,步骤(2)、(3)中所述的前置表FTc^FT1是一种实现倒排索引的列表数据结构,其每行有3列,其内容格式为:
[0028]
【权利要求】
1.一种基于HBase的更新增量索引的方法,其特征在于,包括下述步骤: (1)从HBase索引库中获取待更新文档D的历史内容Ctl 待更新文档D的历史内容在HBase索引库中已经存在,包括其内容文本与内容文本的索引,通过待更新文档D的标识符,从HBase索引库中读取其历史内容; (2)解析待更新文档D的历史内容Ctl,获取Ctl的前置表FTtl; (3)解析待更新文档D的当前内容C1,获取C1的前置表FT1; (4)遍历C1的前置表FT1,对FT1中每个术语t,结合FTtl进行判断,修改前置表FT1和FT0的内容,具体方法如下: 判断FTtl中是否存在术语t,分别进行如下处理: a、如果不存在,则继续判断FT1的下一个术语; b、如果存在,则判断该术语t的出现频率出现位置与FTtl中术语t的出现频率出现位置是否都相同,分别进行如下处理: 1、如果都相同,则将该术语t以及t的出现频率出现位置从FTtl和FT1中删除; i1、如果任一不相同,则将该术语t以及出现频率出现位置从FTtl中删除; (5)将FTtl中的`所有术语t从HBase索引库中删除 步骤(4)执行完毕后,FTtl中的全部术语都是待更新文档D的当前内容C1中不再存在的术语,所以更新时应从HBase索引库中删除这些术语对应的索引信息,在HBase索引库中,以FTtl中的术语t作为主键,以待索引文档D的标识符作为列字段,在HBase索引库中进行查询,将对应位置的索引信息删除; (6)将FT1中的所有术语提交到HBase索引库进行更新 步骤(4)执行完毕后,FT1中的全部术语都是待更新文档D的当前内容C1对比历史内容Ctl发生变化的术语,所以更新时应将这些术语的信息提交给HBase索引库,更新对应术语的索引信息,更新索引时,在HBase索引库中,以FT1中的术语t作为主键,以待索引文档D作为列字段在HBase索引库中进行查询,将对应位置的索引信息替换为FT1中术语t的出现频率与出现位置; (7)将待更新文档D的内容替换为Q。
2.如权利要求1所述的基于HBase的更新增量索引的方法,其特征在于,步骤(2)、(3)中所述的前置表F!;、FT1是一种实现倒排索引的列表数据结构,其每行有3列,其内容格式为:Wm I出现频率I出现位置 通过对文档内容进行解析,得到文档中每个术语的出现频率和出现位置,将这些信息综合在一起,即为该文档内容的前置表。
【文档编号】G06F17/30GK103778219SQ201410025773
【公开日】2014年5月7日 申请日期:2014年1月20日 优先权日:2014年1月20日
【发明者】郑庆华, 贺欢, 李冰, 董博, 李庆喻 申请人:西安交通大学, 上海网达软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1