一种基于字符串后缀的数据索引方法与流程

文档序号:12034747阅读:548来源:国知局

本发明涉及数据索引领域,具体涉及一种基于字符串后缀的数据索引方法。



背景技术:

就目前而言,数据模糊查询的方法主要有以下三种:

通过数据库自身提供的“like”模糊匹配查询功能。

这种方式虽然简单易用,但是无法用到索引。数据量不大时,还可以承受;但数据量稍大,查询的速度就非常慢了,难以满足融合媒体时代的需求。

通过数据库的扩展功能,如利用db全文索引(如mysql中提供的fulltextmatch函数)。

这种方式的缺点主要源于国内外语言文化的差异,在中文分词上存在很大缺陷,不能很好地支持中文字符的检索。虽然有些国内人士通过开发相应的插件满足了中文检索的需求,但是在以下两种情况下却表现出了索引滞后性:一方面,为避免检索过程中出现漏数据、数据不准确的情况,需要人为干预维护索引库;另外,由于词库是基于分词的,在执行不具有明显词义的查询时,无法检索到想要的数据。

通过第三方平台提供全文检索的功能,如:lucene、solr。

这种方式不仅存在第二种方式的问题,索引更新延迟较长、无法做到事务一致性等问题,而且搭建非常复杂。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种基于字符串后缀的数据索引方法,该方法从非拉丁语系的语言体系出发,以字符为单位利用字符串后缀排序算法以及b+树算法构建索引,解决模糊查询的效率和准确度问题。

本发明的目的是通过以下技术方案来实现的:

一种基于字符串后缀的数据索引方法,包括创建索引步骤和数据索引步骤,所述创建索引步骤包括以下子步骤:

s1:写入数据,并提取元数据、行id、添加字符串后缀;

s2:建立索引,基于字符串后缀对所有字符进行排列组合分词并对分词进行排序,利用b+树算法构建索引;

s3:事务判断,对写入数据事务进行判定,若写入成功则解开事务锁;若写入失败,则进行逻辑删除并回收数据;

所述数据索引步骤包括以下子步骤

s01:索引匹配,计算索引对应的编码数值并将该编码数值在b+树中匹配;

s02:获取索引指针列表,在b+树中快速定位到索引的编码数值,该数值的叶子节点即为包含该索引关键字的索引指针列表;

s03:读取数据,根据索引指针数组找到索引结果,对索引结果进行判断,若索引缓存区的时间戳与原始数据的时间戳一致,则直接返回结果;若不一致,则读取原始数据的值,并将原始数据同步给索引缓存区,更新索引。

进一步的,所述的步骤s1写入数据包括以下子步骤:

s11:修改或插入新数据形成新表,开启事务锁,锁定新表,避免脏数据;

s12:将新表数据同步到旧表,新表和旧表之间通过时间戳保证数据一致性;

s13:将更新的数据拷贝到索引缓存区,并提取元数据、行id、添加字符串后缀。

进一步的,所述的索引缓存区的数据结构如下:

索引缓存区的每一条数据都由元数据、行id和数据内容构成;

元数据:包括时间戳、索引+长度等。时间戳用于判断索引缓存区的数据与原始数据是否相同,若不相同则同步数据;索引+长度可以确定索引的词组;

行id:记录该条数据的行id,相同的词组可能出现在不同的数据中,行id作为数据条目的区分;

数据内容:包括数据内容及字符串后缀,以字符为单位加5个字符或6个字符的字符串后缀,字符串后缀用于排列组合进行分词建立索引。

进一步的,所述的步骤s2建立索引包括以下子步骤:

s21:基于字符串后缀采用后缀排序算法对这条数据的所有字符进行排列组合分词;

s22:按拼音+编码的方式计算分词的数值并进行排序;

s23:将排好的序列利用b+树算法构建索引,其中b+树的分支节点保存下级节点范围数组,b+树的叶子节点保存索引缓存区指针列表数组。

进一步的,所述的步骤s01索引匹配具体包括根据索引和长度计算该索引对应的编码数值,将计算出的编码数值在b+树中匹配。

进一步的,所述的步骤s02获取索引指针列表具体包括,b+树的分支节点表示其下级节点的编码数值范围,依次对范围进行判定,快速定位到索引的编码数值,该数值的叶子节点即为包含该索引关键字的索引指针列表。

进一步的,所述的步骤s03读取数据包括:根据索引指针数组指向的行id,找到索引缓存区的索引结果;对索引缓存区的索引结果进行判断,若索引缓存区的时间戳与原始数据的时间戳一致,则直接返回结果;若不一致,则读取原始数据的值,并将原始数据同步给索引缓存区,更新索引。

本发明的有益效果是:本发明能够有效支持“like”类模糊匹配,并且支持索引,避免了大量数据情况下“like”类模糊匹配全表检索的瓶颈,能够显著提高查询效率;本发明从非拉丁语系的语言系统出发,能很好地支持中文的全文检索:每一条数据都基于字符做排列组合,能够支持不具有明显词义的检索,另外也无需人为去维护索引,不存在索引的滞后性。

附图说明

图1是本发明的流程图。

具体实施方式

下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。

如图1所示,

一种基于字符串后缀的数据索引方法,具体包括以下两部分;

【创建索引的过程】

s1:写入数据

修改或插入新数据形成新表,开启事务锁,锁定新表,避免脏数据。

将新表数据同步到旧表,新表和旧表之间通过时间戳保证数据一致性。

将更新的数据拷贝到索引缓存区,并提取元数据、行id、添加字符串后缀。

索引缓存区的作用主要有两点:一、保护原始数据,二、提取和存储元数据,建立索引。

索引缓存区的每一条数据都由元数据、行id和数据内容构成。

元数据:包括时间戳、索引+长度等。时间戳用于判断索引缓存区的数据与原始数据是否相同,若不相同则同步数据;索引+长度可以确定索引的词组。

行id:记录该条数据的行id,相同的词组可能出现在不同的数据中,行id作为数据条目的区分。

数据内容:包括数据内容及字符串后缀,以字符为单位加5个字符或6个字符的字符串后缀,字符串后缀用于排列组合进行分词建立索引。

s2:建立索引

基于字符串后缀采用后缀排序算法对这条数据的所有字符进行排列组合分词。

按拼音+编码的方式计算分词的数值并进行排序

将排好的序列利用b+树算法构建索引,具体如下:

lb+树的分支节点保存下级节点范围数组

lb+树的叶子节点保存索引缓存区指针列表数组

s3:事务判定

对写入数据事务进行判定,若写入成功则解开事务锁;若写入失败,则进行逻辑删除并回收数据。

【数据索引的过程】

s11:索引匹配

根据索引和长度计算该索引对应的编码数值

将计算出的编码数值在b+树中匹配

s12:获取索引指针列表

b+树的分支节点表示其下级节点的编码数值范围,依次对范围进行判定,快速定位到索引的编码数值,该数值的叶子节点即为包含该索引关键字的索引指针列表

s13:读取数据

根据索引指针数组指向的行id,找到索引缓存区的索引结果。

对索引缓存区的索引结果进行判断,若索引缓存区的时间戳与原始数据的时间戳一致,则直接返回结果;若不一致,则读取原始数据的值,并将原始数据同步给索引缓存区,更新索引。

如图1所示,其具体的工作原理如下:

开始;

修改或插入新数据形成新表;

开启事务锁;

写入数据,将新表数据同步到旧表;

将原始数据拷贝到索引缓存区或索引元数据区;

对数据进行排列组合分词;

对分词按拼音+编码进行排序;

构建b+树数据索引;

判断;

成功,解开事务锁,索引停止。

失败,逻辑删除,回收器进行数据回收,索引停止。

以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1