一种基于RLE的倒排格式索引实现方法技术

技术编号:37719043 阅读:8 留言:0更新日期:2023-06-02 00:17
本发明专利技术提供了一种基于RLE的倒排格式索引实现方法,包括倒排结构以及中间结构,所述倒排结构用于存储每个Term的倒排链,所述中间结构用于存储多个Term合并后的倒排链,还包括自定义RLEContainer:采用RLE编码对倒排链进行编码存储,倒排链编码为[start1,length1,start2,length2,...],倒排链为[1,2,....,1000],用ArrayContainer存储,内存空间占用为16bit*100=200Byte,RLE编码存储需要16bit*2=4Byte,选择[start1,length1,start2,length2,...]的存储格式,[start,start+length]之间两两互不重叠。本发明专利技术通过RLE编码的方式设计倒排格式,大幅减少倒排链读取及倒排链合并两个过程中出现的CPU热点问题;重新定义倒排链查询的数据结构,支持批量Merge,减少倒排链Merge耗时,此外内存占用少,支持处理千万数量级的倒排链。千万数量级的倒排链。千万数量级的倒排链。

【技术实现步骤摘要】
一种基于RLE的倒排格式索引实现方法


[0001]本专利技术涉及软件开发
,具体涉及一种基于RLE的倒排格式索引实现方法。

技术介绍

[0002]数据集的检索通常使用倒排索引模型进行检索,可以在海量的文本数据获取信息。基于数据集构建倒排索引文件通常十分庞大,压缩倒排索引可以减少空间使用,在相同的内存中驻留更多的信息,加快检索的速度。而现有的倒排索引压缩算法在空间利用、解压性能存在局限性,因此,倒排索引的高效压缩与解压成为一个重要的课题。倒排索引的压缩分为单词压缩和倒排链表的压缩,倒排链表的压缩主要将单词在文档中出现的docID、frequency和positions等信息进行压缩,而这些信息的压缩通常为整数压缩,Elasticsearch已经成为了最受欢迎的开源检索引擎,其作为离线数仓、近线检索、B端检索的经典基建,已沉淀了大量的实践案例及优化总结。然而在高并发、高可用、大数据量的C端场景。目前优化方案较少;
[0003]对于一个通用的检索引擎而言,Terms检索非常高效,平均到每个Term检索不到0.001ms。然而随着数据和供给的增长,达到万级别的Terms检索的性能与耗时已然无法忽略,仅仅这一次检索就需要5~10ms。一次Terms检索的流程分为两步:分别检索单个Term的倒排链,多个Term的倒排链进行合并。随着数据量的增加,原生的流程数据结构(倒排链读取&倒排链合并)会带来明显的CPU热点问题;
[0004]Elasticsearch一次Terms检索的流程分为两步:分别检索单个Term的倒排链,多个Term的倒排链进行合并。倒排链查询流程为:
[0005]1.从内存中的TermIndex中获取该Term所在的Block在磁盘上的位置;
[0006]2.从磁盘中将该Block的TermDictionary读取进内存;
[0007]3.对倒排链存储格式的进行Decode,生成可用于合并的倒排链。
[0008]可以看到,这一查询流程非常复杂且耗时,且各个阶段的复杂度都不容忽视。

技术实现思路

[0009]为克服现有技术所存在的缺陷,现提供一种基于RLE的倒排格式索引实现方法,以解决随着数据量的增加,原生的流程数据结构(倒排链读取&倒排链合并)会带来明显的CPU热点的问题。
[0010]一种基于RLE的倒排格式索引实现方法,包括倒排结构以及中间结构,所述倒排结构用于存储每个Term的倒排链,所述中间结构用于存储多个Term合并后的倒排链;
[0011]还包括自定义RLEContainer:采用RLE编码对倒排链进行编码存储,将倒排链编码为[start1,length1,start2,length2,...];
[0012]倒排链为[1,2,....,1000],用ArrayContainer存储,内存空间占用为16bit*100=200Byte,RLE编码存储需要16bit*2=4Byte。
[0013]优选的,选择[start1,length1,start2,length2,...]的存储格式,[start,start
+length]之间两两互不重叠。
[0014]优选的,对于多个检索标的的倒排合并流程,对于该格式的合并,将原时间复杂度为的合并流程,改造为复杂度为O的合并流程。
[0015]优选的,保存倒排链的过程与lucene原生的RoaringDocIDSet保持一致,在确认具体的Container的分桶时,额外使用一组索引记录所有有值的bucket的location。
[0016]优选的,在SparseRoaringDocIdSet实现下,所有不为空的bucket被紧密的排列在了一起,并在index[]中记录了其原始bucket的索引,避免大量bucket被空置的情况。
[0017]优选的,在进行倒排链的合并时,直接对紧密排列的denseSet进行遍历,并从index[]获得其对应的原始bucketlocation,避免大量的空置bucket在合并时带来的性能浪费。
[0018]优选的,使用哈希表来实现索引Term的精确查找,减少倒排链的查询与读取的时间。
[0019]优选的,选取RoaringBitmap作为存储倒排链的数据结构,并与RLE Container相结合,实现对倒排链的压缩存储。
[0020]优选的,RLE编码将倒排链的合并问题转换成了排序问题,实现批量合并,在测试用例中将全链路的检索时延降低,解决搜索的检索耗时问题。
[0021]本专利技术的有益效果在于:
[0022]1、通过RLE编码的方式设计倒排格式,大幅减少倒排链读取及倒排链合并两个过程中出现的CPU热点问题;重新定义倒排链查询的数据结构,支持批量Merge,减少倒排链Merge耗时,此外内存占用少,支持处理千万数量级的倒排链;
[0023]2、可以大大降低合并的计算耗时,减少CPU的消耗,同时避免了大量的空置bucket在合并时带来的性能浪费。
附图说明
[0024]图1为本专利技术的完整链路查询耗时的示意图。
具体实施方式
[0025]以下通过特定的具体实例说明本专利技术的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本专利技术的其他优点与功效。本专利技术还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本专利技术的精神下进行各种修饰或改变。
[0026]参照图1,一种基于RLE的倒排格式索引实现方法,包括倒排结构以及中间结构,倒排结构用于存储每个Term的倒排链,中间结构用于存储多个Term合并后的倒排链,倒排索引分为倒排表(posting_list)、词项字典(term dictionary)、词项索引(termindex)三部分组成,其中倒排表是一个int类型的有序数组,存储了匹配某个term(词汇)的所有文档的id词项字典分为三部分组成tip、tim、doc;
[0027]还包括自定义RLEContainer:采用RLE编码对倒排链进行编码存储,将倒排链编码为[start1,length1,start2,length2,...],倒排索引是信息检索系统的重要组成部分之一,被用于维护数十亿文档并对大量查询操作进行响应,随着当前互联网数据量的不断增
加,倒排索引的体积也不断攀升,倒排索引压缩算法可以提高信息检索系统的性能,减少索引的空间占用,加快查询处理速度,因而成为了重要的研究对象,模式化编码相比传统的位编码具有解码速度快,压缩效果好的优点,因而被广泛应用于倒排索引压缩中;
[0028]一个倒排链的表示为[start,length],RLE编码做到了对倒排链的极致压缩;
[0029]假设倒排链为[1,2,....,1000],用ArrayContainer存储,内存空间占用为16bit*100=200Byte,RLE编码存储只本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于RLE的倒排格式索引实现方法,其特征在于:包括倒排结构以及中间结构,所述倒排结构用于存储每个Term的倒排链,所述中间结构用于存储多个Term合并后的倒排链;还包括自定义RLEContainer:采用RLE编码对倒排链进行编码存储,将倒排链编码为[start1,length1,start2,length2,...];倒排链为[1,2,....,1000],用ArrayContainer存储,内存空间占用为16bit*100=200Byte,RLE编码存储需要16bit*2=4Byte。2.根据权利要求1所述的一种基于RLE的倒排格式索引实现方法,其特征在于:选择[start1,length1,start2,length2,...]的存储格式,[start,start+length]之间两两互不重叠。3.根据权利要求1所述的一种基于RLE的倒排格式索引实现方法,其特征在于:对于多个检索标的的倒排合并流程,对于该格式的合并,将原时间复杂度为的合并流程,改造为复杂度为O的合并流程。4.根据权利要求1所述的一种基于RLE的倒排格式索引实现方法,其特征在于:保存倒排链的过程与lucene原生的RoaringDocIDSet保持一致,在确认具体的Container的分桶时,额外使用一组...

【专利技术属性】
技术研发人员:王龙庄春
申请(专利权)人:天翼视讯传媒有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1