专利名称:数据库子串过滤索引系统及其构建、查询方法
技术领域:
本发明属于数据库技术领域,特别涉及一种数据库子串过滤索引系统及其构建、查询方法。
背景技术:
在很多行业中,每时每刻都在产生着大量数据,从而形成了对海量历史数据的存储需求,在这些海量数据中,常常需要对某些文本数据进行子串查询。所谓子串查询,指的是对某列数据,查询包含某一个子字符串的数据,或者是数据库的like查询,在大部分情况下都是形如select*from t where name like ‘%abcd%’的查询,这实际上就是对name这一列进行的一个abed的子串查询。这些需求要求我们为这类查询建立索引以满足快速 查询需求,同时由于在不断产生新的数据要求导入到存储系统中,还要求数据库系统有极 高的导入速度。然而,传统的like查询及子串查询没法使用索引,而在互联网应用中,类似的查询有全文检索中的关键字查询,会对数据建立倒排索引,然而并不适用于数据库的精确查询以及海量历史数据。这类索引用于数据库精确子串查询以及海量历史数据存在着三方面的问题I、无法得到精确结果。倒排索引只能先分词针对可能的关键字建立索引,不是真正的全文任一子串的索引,因此查询结果无法保证所有包含了被查询子串(特别是不规则词语或自造词)的数据都被返回,有些包含了查询子串的数据可能由于没有被成功分词从而没有被倒排索引预处理到,因此这在数据库的精确查询中是不可用的。2、空间成本高,索引本身就必须对可能被查询的所有分词进行预处理,索引数据量非常大,甚至大过数据本身,并且难以被压缩,在数据导入过程中压力极大;对于海量历史数据来说,往往非常容易压缩,因此通过压缩能够将数据量大大缩小,但是一旦使用这类索引,索引庞大又几乎无法压缩从而使数据压缩带来的好处几乎抵消。3、维护成本高,建立索引速度慢。有两种方式建立索引,一是先建立,其代价是数据在导入时需要同步地维护索引,随机的索引插入可能是非常耗时的,同时,在索引建立完成之后,还是需要一个独立的压缩过程;二是后建立,这意味着在数据装载完成之后,需要对大批数据重新进行分词及进行索引创建,如果单个索引维护的数据较少,则意味着索引的数量会增加,这就降低了索引本身的效能。综合起来看,无论采用那种模式,维护全文索引对数据装载速度都会产生严重的影响。综上所述,如何利用好海量历史数据子串查询特征,如何为海量历史数据子串查询建立空间占用小且有效的索引,实现对海量历史数据特别是为其压缩后数据的快速导入和查询是目前迫切需要解决的问题。
发明内容
本发明的目的在于克服现有技术的不足,提供一种精确度高、空间成本及维护成本低且建立索引速度快的数据库子串过滤索引系统及其构建、查询方法。本发明解决其技术问题是采取以下技术方案实现的一种数据库子串过滤索引系统,包括将导入数据进行分片数据存储并从每个分片数据中提取出描述分片数据的子串特征构建一个或多个子串特征过滤位图的分片式数据存储模块,以及用于存储以子串特征过滤位图为子串特征索引的过滤索引存储模块。而且,所述分片数据存储的存储方式为每个分片数据作为数据库中的一行存储,对于同一分片数据尽可能连续存储;所述子串特征索引的数据存储方式为包括对多个不同小子串特征位图的存储,对于同一个小子串特征位图采用连续存储。而且,所述的分片数据和子串特征索引采用压缩后的数据进行存储。一种基于数据库子串过滤索引系统的构建方法,包括以下步骤
步骤I :对所有导入数据进行分片存储;步骤2 :对于每个分片数据,使用小子串特征值建立小子串特征位图作为子串特征的概要知识,分别为每个需要建子串过滤索引的列建立一个或多个子串特征过滤位图,然后分别进行保存;步骤3 :为每个小子串特征位图预存足够连续物理空间,在内存中建立一个或多个小子串特征位图的缓存,当缓存积累到一定大小时将位图数据回刷到物理存储;步骤4 :将所有分片数据包的所有子串特征位图,共同构成子串过滤索引。而且,所述步骤I对导入数据进行分片存储包括以下处理方式按导入顺序每隔一定行数作为一个分片,或者按照哈希或其他规则进行聚集分片,或是对缓冲区内的导入数据排序后按顺序分片。而且,所述步骤2建立小子串特征位图方法为(I)构建一个稀疏位图,该稀疏位图的位数与要索引数据的字节数相关;(2)为数据每一行指定长度为K的小子串计算出特征值;(3)将特征值映射到稀疏位图上进行置位;(4)所有小子串映射置位后的结果位图即为小子串特征位图。而且,所述多个子串特征位图的特征值计算方法采用各种不同哈希算法及指定各种不同K值;所述特征值到位图某一位的映射使用取模方法。一种基于数据库子串过滤索引系统的查询方法,包括以下步骤步骤I、获取子串过滤索引包含的所有子串特征过滤位图并创建分片数据的过滤结果位图;步骤2、遍历过滤结果位图,获取未被过滤的分片数据,遍历查询条件对应列,判断真实数据是否符合子串查询条件,若符合则返回该行数据。而且,所述步骤I创建分片数据的过滤结果位图采用如下方法实现(I)假设子串特征位图所对应的小子串长度为K,将待查询子串分解得到长度为K的所有小子串作为过滤条件,计算这些小子串特征值,映射得到这些值在子串特征位图中所处的位置下标;遍历每个分片数据对应的该子串特征位图,判断位图中所有小子串对应下标所指向位置是否被置位,只要有一个未被置位即可确定相应分片数据被过滤;(2)为所有分片数据包按顺序建立一个过滤结果位图,在使用每个子串过滤结果位图进行过滤时,将被过滤的分片数据包对应位置置位,实现使用位图进行过滤结果的保存。而且,所述对子串特征过滤位图进行分片过滤时,采用多个特征过滤位图同时进行并将结果进行合并然后置位到结果位图中,或者采用一个子串特征过滤位图处理完后再使用下一个进行过滤并将结果进行合并;若被过滤掉的分片数据占所有分片数据的比例达到一定阈值时,停止对剩余位图的过滤处理。本发明的优点和积极效果是I、本发明对导入数据进行分片处理并对数据在分片内部按列进行压缩存储,能够获得更高的压缩率和单列访问性能。2、本发明对分片数据的稀疏哈希位图描述能够大大避免对不存在查询值的分片数据包的访问,从而大大降低了磁盘访问开销以及数据解压开销,大大提高数据库性能。 3、本发明使用稀疏哈希位图的概要知识是可扩展的,能够在此存储框架上进一步优化对分片数据的描述方法,进一步提高访问性能。4、本发明采用的稀疏哈希位图具有稀疏特性且极易压缩,因此索引空间占用极小,相对于数据大小几乎可以忽略,但在海量历史数据的等值查询中可获取与传统索引相当的查询性能。5、本发明设计合理,解决了传统索引空间占用大、压缩数据难以索引的的问题,实现了对海量文本数据高效的子串、关键字查询功能,大大减少了对数据的磁盘读写次数,提升了数据库的全表扫描性能。
图I是本发明的数据库子串过滤索引系统整体框架图;图2是稀疏哈希位图映射标记示意图;图3是本发明的数据库子串过滤索引系统的构建流程图;图4是本发明的数据库子串过滤索引系统的查询流程图。
具体实施例方式以下结合附图对本发明实施例做进一步详述一种数据库子串过滤索引系统,如图I所示,包括分片式数据存储模块和过滤索引存储模块。所述的分片式数据存储模块将导入数据作为分片数据存储于数据库中,每个分片数据相当于普通数据库中的一行,只是每个分片数据都较大,并连续存储,从而可以获得较高的访问性能;对于不同分片数据,要求在存储中能够快速地在实际存储中根据分片编号快速定位,即分片数据的存储对外提供随机存取功能。所述的过滤索引存储模块用于存储子串过滤位图,该子串特征过滤位图是从每个分片数据中提取出描述分片数据子串特征的概要知识,可对同一列数据建立多个子串特征过滤位图。每个过滤位图使用不同的子串特征描述方法,供查询时协同使用;不同的子串特征描述方法可以是小子串长度不同,也可以是特征值计算方法不同,也可以是位图长度不同,或是映射方法的不同。在子串过滤索引数据存储架构中,包含对多个不同小子串特征位图的存储,对于同一个小子串特征位图,要求所有分片数据的位图数据连续的存放,以获得尽可能高的顺序访问性能;对于不同的小子串特征位图,对空间的连续性没有要求。
图2给出了小子串特征位图映射标记关系,小子串特征位图根据一个分片数据包的该列数据大小申请足够的位图空间并清0,原数据与位图的空间比例可由用户指定,小子串长度由用户指定为K (K为小于行数据长度的自然数),系统获取数据包中的每一行数据的所有长度为K的小子串,计算这些小子串的特征值,可使用哈希计算特征值,将这些特征值映射到该小子串特征位图中进行标记,图中*号即表示位图中的某位被标记,若子串查询的所有长度为K的小子串经同样方法映射到位图中,对应位置只要不存在该标记,则表明该分片数据包可被过滤。一种基于数据库子串过滤索引系统的构建方法,包括以下步骤I、对所有导入数据进行分片存储。在本步骤中,对导入数据进行分片可以包括以下几种方式按导入顺序每隔一定行数作为一个分片,或者按照哈希或其他规则进行聚集分片,或是对缓冲区内的导入数据排序后按顺序分片。
2、对于每个分片数据,使用小子串特征值建立小子串特征位图作为子串特征的概要知识,分别为每个需要建子串过滤索引的列建立一个或多个子串特征过滤位图,并分别进行保存。在本步骤中,建立小子串特征位图方法为(I)构建一个稀疏位图,位图的位数与要索引数据的字节数相关并允许用户设置,位数越多则位图越稀疏,查询效果越好;(2)为数据每一行的每一个长度为K (K为指定的小于数据长度的自然数)的小子串计算出特征值,特征值计算方法可以是各种哈希算法或是其他特征描述方法;(3)将特征值映射到前述稀疏位图上进行置位,特征值到位图某一位的映射可以使用取模或其他映射方法;(4)所有小子串映射置位后的结果位图即为小子串特征位图。3、为每个小子串特征位图预存足够连续物理空间,在内存中维护按上述方法建立的一个或多个小子串特征位图的缓存,当缓存积累到一定大小时将位图数据回刷到物理存储,同一个位图的数据在物理存储中连续存放。4、所有分片数据包的所有子串特征位图,共同构成了子串过滤索引。通过上述步骤,将分片数据包的所有子串特征位图构成了子串过滤索引,在查询时协同处理调度使用。如图3所示,本基于数据库子串过滤索引系统的构建方法通过软件程序实现的软件流程为301为子串过滤索引创建存储空间。302导入一行数据。303从导入数据中取得待索引列的数据。304根据用户指定的多个需根据不同方式建立的小子串特征位图,为每个小子串特征位图对数据提取所有的指定长度小子串并根据相应的方法计算小子串的特征值,将这些特征值按照各个小子串特征位图的需要分别保存起来。305判断数据行数是否满足分片大小阈值或已完成导入(分片打包条件),若不满足则返回302,继续导入下一行数据。
306-308若满足为打包条件,存储分片包数据,并按照图2的映射方法创建每个小子串特征位图,根据以计算好的特征值为每个小子串特征位图置位。309判断是否已导入完成所有数据,若没有回到302继续进行导入操作,若导入完成进入下一流程。310已完成所有数据导入,结束导入流程。一种基于数据库子串过滤索引系统的查询方法,包括以下步骤I、获取子串过滤索引包含的所有子串特征过滤位图并创建分片数据的过滤结果位图。在本步骤中,创建分片数据的过滤结果位图采用如下方法实现(I)对多个子串特征过滤位图进行分片过滤 假设子串特征位图所对应的小子串长度为K,将待查询子串分解得到长度为K的所有小子串作为过滤条件,根据相应子串特征位图的特征计算方法计算这些小子串特征值,以及根据相应映射方法得到这些值在子串特征位图中所处的位置下标;遍历每个分片数据对应的该子串特征位图,测试位图中前述所有小子串对应下标所指向位置是否被置位,只要有一个未被置位即可确定相应分片数据可被过滤。(2)为所有分片数据包按顺序建立一个过滤结果位图,在使用每个子串过滤结果位图进行过滤时,将被过滤的分片数据包对应位置置位,实现使用位图进行过滤结果的保存在对多个子串特征过滤位图进行分片过滤过程中,可多个特征过滤位图同时进行,将结果进行合并然后置位到结果位图中,也可一个子串特征过滤位图处理完后再使用下一个进行过滤并将结果进行合并。在对多个子串特征过滤位图进行分片过滤过程中,若被过滤掉的分片数据占所有分片数据的比例达到一定阈值时,可停止对剩余位图的过滤处理。2、遍历过滤结果位图,获取未被过滤的分片数据,遍历查询条件对应列,判断真实数据是否符合子串查询条件,若符合则返回该行数据。如图4所示,本基于数据库子串过滤索引系统的查询方法通过软件程序实现的具体流程为401创建分片数据的过滤结果位图,用来标明每个分片数据包是否已被过滤索引掉,从而在实际查询时可跳过被过滤的数据包。402对查询条件所在子串过滤索引的每个数据包对应的所有小子串特征位图进行遍历。403根据该位图创建时的方法,计算查询条件对应的所有小子串的特征值,并找到这些特征值在位图中映射的位置是否被置位,只要有一个未被置位则表明该数据包不可能包含被查询值,可被过滤掉,进入404,否则表明该位图对应的分片数据包为可疑数据包,流程继续下一个数据包的检验。404进入这一流程表明当前稀疏哈希位图对应的数据包可被过滤,在结果位图中相应数据包位置进行置位。405判断该索引是否已扫描完成,若未完成则回到402继续检验,若已完成进入下
一流程。
406根据最终的过滤结果位图,访问未被过滤掉的所有分片数据包,对未被过滤掉的分片数据包执行精确查询,在这时候,大部分不符合查询条件的分片数据已经不用进行访问和解压及查询了,从而大大提高了系统查询性能。需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明并不限于具体实施方式
中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出 的其他实施方式,同样属于本发明保护的范围。
权利要求
1.一种数据库子串过滤索引系统,其特征在于包括将导入数据进行分片数据存储并从每个分片数据中提取出描述分片数据的子串特征构建一个或多个子串特征过滤位图的分片式数据存储模块,以及用于存储以子串特征过滤位图为子串特征索引的过滤索引存储模块。
2.根据权利要求I所述的数据库子串过滤索引系统,其特征在于所述分片数据存储的存储方式为每个分片数据作为数据库中的一行存储,对于同一分片数据尽可能连续存储;所述子串特征索引的数据存储方式为包括对多个不同小子串特征位图的存储,对于同一个小子串特征位图采用连续存储。
3.根据权利要求I所述的数据库子串过滤索引系统,其特征在于所述的分片数据和子串特征索引采用压缩后的数据进行存储。
4.一种根据权利要求I 3中任一项所述的数据库子串过滤索引系统的构建方法,包括以下步骤 步骤I :对所有导入数据进行分片存储; 步骤2 :对于每个分片数据,使用小子串特征值建立小子串特征位图作为子串特征的概要知识,分别为每个需要建子串过滤索引的列建立一个或多个子串特征过滤位图,然后分别进行保存; 步骤3 :为每个小子串特征位图预存足够连续物理空间,在内存中建立一个或多个小子串特征位图的缓存,当缓存积累到一定大小时将位图数据回刷到物理存储; 步骤4:将所有分片数据包的所有子串特征位图,共同构成子串过滤索引。
5.根据权利要求4所述的数据库子串过滤索引系统,其特征在于所述步骤I对导入数据进行分片存储包括以下处理方式按导入顺序每隔一定行数作为一个分片,或者按照哈希或其他规则进行聚集分片,或是对缓冲区内的导入数据排序后按顺序分片。
6.根据权利要求5所述的数据库子串过滤索引系统,其特征在于所述步骤2建立小子串特征位图方法为 (1)构建一个稀疏位图,该稀疏位图的位数与要索引数据的字节数相关; (2)为数据每一行指定长度为K的小子串计算出特征值; (3)将特征值映射到稀疏位图上进行置位; (4)所有小子串映射置位后的结果位图即为小子串特征位图。
7.根据权利要求6所述的数据库子串过滤索引系统,其特征在于所述多个子串特征位图的特征值计算方法采用各种不同哈希算法或指定不同的K值进行计算;所述特征值到位图某一位的映射使用取模方法。
8.—种根据权利要求I 3中任一项所述的数据库子串过滤索引系统的查询查询方法,包括以下步骤 步骤I、获取子串过滤索引包含的所有子串特征过滤位图并创建分片数据的过滤结果位图; 步骤2、遍历过滤结果位图,获取未被过滤的分片数据,遍历查询条件对应列,判断真实数据是否符合子串查询条件,若符合则返回该行数据。
9.根据权利要求8所述的数据库子串过滤索引系统,其特征在于所述步骤I创建分片数据的过滤结果位图采用如下方法实现(1)假设子串特征位图所对应的小子串长度为K,将待查询子串分解得到长度为K的所有小子串作为过滤条件,计算这些小子串特征值,映射得到这些值在子串特征位图中所处的位置下标;遍历每个分片数据对应的该子串特征位图,判断位图中所有小子串对应下标所指向位置是否被置位,只要有一个未被置位即可确定相应分片数据被过滤; (2)为所有分片数据包按顺序建立一个过滤结果位图,在使用每个子串过滤结果位图进行过滤时,将被过滤的分片数据包对应位置置位,实现使用位图进行过滤结果的保存。
10.根据权利要求8所述的数据库子串过滤索引系统,其特征在于所述对子串特征过滤位图进行分片过滤时,采用多个特征过滤位图同时进行并将结果进行合并然后置位到结果位图中,或者采用一个子串特征过滤位图处理完后再使用下一个进行过滤并将结果进行合并;若被过滤掉的分片数据占所有分片数据的比例达到一定阈值时,停止对剩余位图的过滤处理。
全文摘要
本发明涉及一种数据库子串过滤索引系统及其构建、查询方法,其技术特点是该子串过滤索引系统包括将导入数据进行分片数据存储并从每个分片数据中提取出描述分片数据的子串特征构建一个或多个子串特征过滤位图的分片式数据存储模块,以及用于存储以子串特征过滤位图为子串特征索引的过滤索引存储模块,还包括该子串过滤索引系统的构建和查询方法。本发明设计合理,解决了传统索引空间占用大、压缩数据难以索引的的问题,实现了对海量文本数据高效的子串、关键字查询功能,大大减少了对数据的磁盘读写次数,提升了数据库的全表扫描性能。
文档编号G06F17/30GK102831146SQ201210202879
公开日2012年12月19日 申请日期2012年6月19日 优先权日2012年6月19日
发明者蔡华林, 冯柯, 徐昶, 何清法, 周丽霞, 蒋志勇, 毛云青, 赵殿奎, 李海峰 申请人:天津神舟通用数据技术有限公司