全文检索中倒排索引及其追加数据的保存方法及存储装置的制作方法

文档序号:6386417阅读:319来源:国知局
专利名称:全文检索中倒排索引及其追加数据的保存方法及存储装置的制作方法
技术领域
本发明属于数据存储领域,尤其是涉及一种在全文检索中倒排索引及其追加数据的保存方法及存储装置
背景技术
在关系数据库系统里,全文索引是检索文档数据最有效率的方式之一,在当前的网络环境下,信息量和用户量都成爆炸性的增长,全文索引成为信息检索系统的主要手段之一,倒排索引是全文检索系统的核心部分,其存储结构对全文检索系统性能也有很大的影响。倒排索引(英语Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。全文索引倒排文档数据是由Term ID对应的一组文档编号和在文档中的偏移组成,其表现形式为Term ID—> {〈doc ID, {offset}},其中Term ID是断词器划分的最小索引单元,在中文全文检索中一般为字、词、英文、数字串和几种形式的组合,具有以下特点1.不同Term对应倒排数据长度相差很大,常见的字如“的”、“地”等字符往往出现频率相当的高,也有仅出现一次的特殊字符串。2.全文索引中词汇量巨大,往往一个全文检索库会拥有千万个词汇,每一个词汇都作为一个检索单元,会占用大量的存储空间全文索引倒排数据的存储一般有两种一、采用经验数据把已知词典按词频划分为中、高、低几档的方式,每档词频采用不同的数据块大小存储,存储高频词的每块数据较大,反之最低频率块最小。这种方式的好处是磁盘浪费较少,读取效率有保障,缺点是一旦实际数据与经验数据不符或者出现新的词汇时,词频发生较大变化,则出现高频词空间浪费,低频词词链超长造成读取效率低。二、采用划分大数据单元的方式,如每IGB数据为一个单元,每个单元中所有倒排文档数据按词条编号、文档编号、偏移量(TermID、Doc ID、Offset)排序,在索引完成之前把所有的数据单元进行数据合并为一个最终单元。这种方式的优点是空间浪费为0,缺点是最终的数据排序需要一倍磁盘剩余空间,造成磁盘空间利用率为50%,合并的时间较长。

发明内容
本发明要解决的问题是提供一种在全文检索系统中的高效保存索引的方法,可以充分提高磁盘空间利用率。为解决上述技术问题,本发明采用的技术方案是一种在全文检索系统中的高效保存索引的方法,包括I)比较索引单元数据长度和预设的阀值K的大小关系;
2)如果索引单元数据长度小于K,将索引单元数据全部存入B树中;3)如果索引单元数据长度等于K,将索引单元数据从开始部分至K的部分存入索引单元数据数据块;4)如果大于K,则比较索引单元数据长度和η*Κ (η=2, 3,……)的大小关系,并按照下列方式进行存储1.如果索引单元数据长度大于(η_1)*Κ且小于η*Κ,将索引单元数据从开始部分至η*Κ部分存入索引单元数据块,将剩余部分存入B树中;2.如果索引单元数据长度等于η*Κ,将所有索引单元数据按次序存入索引单元数 据块。进一步的,所述的B树可以存储至少两个长度小于K值或者长度大于K值存储在块设备之后的剩余数据的索引单元数据。进一步的,所述的B树为B+树的一种变形,所述的B+树的一种变形为去掉叶子节点中保存的指向兄弟节点的指针的B+树。根据本发明的另一方面,本发明还提供了一种高效保存索引方法的存储装置,包括存储数据块单元,用来存储固定长度的整数倍的索引单元数据;B树存储页单元,用来存储索引单元数据不足K的剩余部分。进一步的,所述的B树为B+树的一种变形,所述的B+树的一种变形为去掉叶子节点中保存的指向兄弟节点的指针的B+树。根据本发明所提供的一种高效保存索引方法的存储装置的追加全文索引数据的存储方法I)计算原B树中的索引单元数据与追加的索引单元数据之和;2)如果索引单元数据长度之和小于η*Κ且大于(η+1)*Κ(η=2,3……),将B树存储的部分取出并将索引单元数据从B树存储的部分至η*Κ的部分存入索引单元数据数据块,将剩余索引单元数据存入B树中;3)如果索引单元数据之和等于η*Κ,将B树存储的部分取出并将索引单元数据从B树存储部分至η*Κ的部分存入索引单元数据数据块;4)如果索引单元数据之和小于K,则将追加部分依次存入原B树存储部分。由于采用上述技术方案,能够有效的提高倒排文档的全文索引的存储效率,减少了磁盘空间的浪费,有效提高了数据读取速率;能够方便实现写时复制(Copy On Write)机制,进而提高了数据安全性和读取数据的并发指标。


图1是本发明的高效保存索引方法及追加数据的保存方法流程示意2是本发明中一个实例的存储示意3是本发明实例中实现写时复制机制的示意图
具体实施例方式在本发明的一个实施运用场景中,根据全文建立起相应的全文索引倒排文档数据,其表示形式为Term ID (词条编号)一> {〈doc ID (文档编号),{offset}(偏移量)},在本实例中采用B树结合块文件的方式来存储Key-Value数据,Key为词条编号,Value为倒排文档数据,是变长数据,当创建索引数据时,Value的数据不断追加,当长度超过预设的阈
值n*K (n=l, 2, 3......)时,从开始部分提取Value的长度为n*K的数据存储到块单元,对于
余下的小于k的索引数据,块单元采用定长数据保存对应TermId的倒排文档数据,每个数据块与B树中的相对应key值部分组成一个链。从而形成块文件数据保存倒排文档的成块部分,B树中保存倒排文档的碎块。这里的的阀值里K值的设定是参考存储倒排文档数据的存储器性能来确定,一般都采用计算机存储的最小单元,如32k,64k等,方便磁盘阵列存储数据。如图2所示,假设全文中共有断词器所划定的三个索引最小单元,分别编号为Term ID (I),Term ID (2)及Term ID (3),其中Term ID (I)是一个在全文中只出现过极少的次数的字符串,当将其倒排文档索引进行存储时,如图中21所示,Term ID (I)的倒排文档索引的数据长度并未超过K,即Term ID (I )-value〈k,将其索引数据存入到B树存储页中。Term ID (2)是另一个字符串,在全文中出现的次数较多,当将其倒排文档索引进行存储时,如图中22所示,Term ID (2)的倒排文档索引的数据长度等于预设的阀值K,即Term ID (I) -value=nk (n=l, 2, 3......),同样将其索引数据存入到存储块单元。Term ID (3)是在全文索引中的另一个字符串,在全文中经常出现,当将其倒排文档索引进行存储时,如图23所示,Term ID (2)的倒排文档索引的数据长度等于预设的阀值K,即(n+l)*k>Term ID (I )-value>n*k,从开始部分提取Value的长度为K的数据存储到存储块单元,剩余部分存入B树中,数据块与B树中的相对应key值部分组成一个链。在实际中,经常会有倒排文档数据追加的情况发生,根据倒排文档数据不同长度的情况,仍然有不同的对应存储方法,仍以上一实例中Term ID(1)、来举例说明,Term ID
(I)有少量的追加数据,将Term ID (I)中B树存储页中的索引数据长度与追加数据长度相力口,如果相加后的Term ID (I )-value=nk,则将原B树存储页中的索引数据取出,从B树存储页中的索引数据的部和追加数据依次存入数据块,并删除B树键值为TermID的数据;如
果相加后的(n+l)K(n=l, 2, 3......) >Term ID (I) -value>nk (n=l, 2, 3......),则将原 B 树存储
页中的索引数据取出,并将原B树存储页中的索引数据和追加数据中从开始部分到与原有索引数据相加到nk的部分按顺序存入存储块中,并将剩余的追加数据更新到B树中相同的TermID中;如果追加的索引单元数据与原有的B树存储的索引单元数据长度相加仍然小于K,则将追加数据依次存入B树存储页内。根据大数据的长尾效应,全文检索中的倒排文档中大部分词条对应的数据非常少,不足以达到块文件单位大小,借助B树页保存Key-变长Value的机制,在一个页内可以保存多个Key的倒排文档的零星数据,而B树的缺省磁盘利用率为75%,则总的磁盘利用率为(B树文件大小X75% +块文件大小)/ (B树文件大小+块文件大小)当块文件比较大时,总磁盘利用率趋向100% (在1000万新闻型文档测试数据为99. 5%)0B树索引的页面和块文件的块单元都是定长数据,方便进行直接定位和使用缓存算法,其中B树的页面大小=4X块单元大小。在实际项目中可以综合考虑可用于Cache的内存大小、磁盘读写效率和其他因素,最终确定B树的Page大小和块文件的每个块单元的大小。块文件可以利用系统空闲时间进行整理,把同一 Term的倒排数据放到连续的磁盘空间。对于倒排数据小于一个块单元的词条,每次读取耗时就是读取B树的耗时,其读磁盘次数为B树深度L次,对于倒排数据超过一个块单元的词条,每次完整读取数据的成本是读取一次B树和读取一次块数据,考虑到全文索引中常用与或等逻辑运算,倒排数据一般是随机读取,则能充分利用块文件每块的定长特性,最终有效的提高数据读取效率。全文索引实时创建索引时,产生倒排数据的追加需求,B树引起为层状数据特性,能够方便的实现写时复制机制,由于B树是一个树状结构,修改时B树每个页修改之前就先复制一份,对直接或者间接引用该页的存储页也创建一个复制,所有的修改在复制上进行修改,从而形成了修改前和修改后两个版本,在修改前版本上进行读操作,在修改后版本上进行写操作,两者互不影响,并提高了并发性能。块存储也是如此,数据仅在文件尾追加,访问时同样可以实现读写分离,互不影响,提高并发。在数据提交成功时,写版本转换为读版本,如果提交失败,则写版本放弃,从而保证了数据的完整性。如图3所示,读写双版本能够完成实时的追加数据并提高边建便搜的并发性能。为了方便实现COW机制,B树采用B+树的变形,其与B+树的区别在于去掉了叶子节点中保存的指向兄弟节点的指针,否则会出现发生修改时需要复制整个B树的现象。以上对本发明的一个实施例进行了详细说明,但所述内容仅为本发明的较佳实施例,不能被认为用于限定本发明的实施范围。凡依本发明申请范围所作的均等变化与改进等,均应仍归属于本发明的专利涵盖范围之内。
权利要求
1. 一种在全文检索系统中的高效保存倒排索引的方法,包括1)比较索引单元数据长度和预设的阀值K的大小关系;如果索引单元数据长度小于K, 将索引单元数据全部存入B树中;2)如果索引单元数据长度小于K,将索引单元数据全部存入B树中;3)如果索引单元数据长度等于K,将索引单元数据从开始部分至K的部分存入索引单元数据数据块;4)如果大于K,则比较索引单元数据长度和η*Κ(η=2, 3,……)的大小关系,并按照下列方式进行存储1.如果索引单元数据长度大于(η-1)*Κ且小于η*Κ,将索引单元数据从开始部分至 η*Κ部分存入索引单元数据块,将剩余部分存入B树中;2.如果索引单元数据长度等于η*Κ,将所有索引单元数据按次序存入索引单元数据块。
2.根据权利要求1所述的高效保存索引的方法,其特征在于所述的B树为B+树的一种变形,所述的B+树的一种变形为去掉叶子节点中保存的指向兄弟节点的指针的B+树。
3.一种根据权利要求1所述高效保存索引方法的存储装置,包括存储数据块单元,用来存储固定长度的整数倍的索引单元数据;B树存储页单元,用来存储索引单元数据不足K的剩余部分。
4.根据权利要求4所述的存储装置,其特征在于所述的B树存储页单元可用来存储至少两个长度小于K值或者长度大于K值存储在块设备之后的剩余数据的索引单元数据。
5.根据权利要求4所述的存储装置,其特征在于所述的B树为B+树的一种变形,所述的B+树的一种变形为去掉叶子节点中保存的指向兄弟节点的指针的B+树。
6.一种如权利要求4所述高效保存索引方法的存储装置的数据追加存储方法,包括1)计算原B树中的索引单元数据长度与追加的索引单元数据长度之和;2)如果索引单元数据长度之和小于η*Κ且大于(η+1)*Κ (η=2, 3……),将B树存储的部分取出并将索引单元数据从B树存储的部分至η*Κ的部分存入索引单元数据数据块,将剩余索引单元数据存入B树中;3)如果索引单元数据之和等于η*Κ,将B树存储的部分取出并将索引单元数据从B树存储部分至η*Κ的部分存入索引单元数据数据块;4)如果索引单元数据之和小于K,则将追加部分依次存入原B树存储部分。
全文摘要
本发明提供了一种全文检索系统中的高效保存倒排索引的方法,包括检测索引单元数据长度是否大于阀值K;如果索引单元数据大于n*K且小于(n+1)*K(n为自然数),将索引单元数据从开始部分至n*K的部分存入索引单元数据数据块,将剩余索引单元数据存入B树中;如果索引单元数据等于n*K,将索引单元数据从开始部分至n*K的部分存入索引单元数据数据块;如果索引单元数据小于K,将索引单元数据全部存入B树中。本发明的有益效果是能够有效的提高倒排文档的全文索引的存储效率,提高了数据读取速率,能够方便实现写时复制(Copy On Write)机制,进而提高了数据安全性和读取数据的并发指标。
文档编号G06F17/30GK103020299SQ201210591989
公开日2013年4月3日 申请日期2012年12月29日 优先权日2012年12月29日
发明者张学, 范振勇, 崔维力, 武新, 赵伟 申请人:天津南大通用数据技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1