CN109299152A - 一种实时数据流的后缀数组索引方法及装置 - Google Patents
一种实时数据流的后缀数组索引方法及装置 Download PDFInfo
- Publication number
- CN109299152A CN109299152A CN201810983178.0A CN201810983178A CN109299152A CN 109299152 A CN109299152 A CN 109299152A CN 201810983178 A CN201810983178 A CN 201810983178A CN 109299152 A CN109299152 A CN 109299152A
- Authority
- CN
- China
- Prior art keywords
- section
- data
- source data
- suffix array
- domain
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 23
- 230000004044 response Effects 0.000 claims abstract description 21
- 239000000284 extract Substances 0.000 claims abstract description 7
- 230000015654 memory Effects 0.000 claims description 23
- 230000008569 process Effects 0.000 claims description 17
- 238000010276 construction Methods 0.000 claims description 16
- 230000002045 lasting effect Effects 0.000 claims description 15
- 230000007246 mechanism Effects 0.000 claims description 7
- 238000007781 pre-processing Methods 0.000 claims description 5
- 238000012423 maintenance Methods 0.000 claims description 4
- 238000004891 communication Methods 0.000 claims description 3
- 238000007726 management method Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种实时数据流的后缀数组索引方法,该方法步骤:服务端接收实时数据流,提取源数据,将其预处理为文档;解析文档,将文档按域分发,各个域接收源数据,并启动独立线程进行数据索引和存储;一个域由多个段组成,域对象接收源数据后直接将其写入段中,并设置段源数据更新信号,即可返回响应;若文档所有域均返回响应,则向客户端返回响应信息;后缀数组构造工具在后台监听段源数据更新信号,自动对段源数据构造后缀数组,生成段后缀数组;段源数据、段后缀数组、段信息连接成完整的后缀数组索引,源数据索引成功。本发明可在无需分词的情况下实时索引异构数据,并采用异步方式生成索引,加快响应时间,本发明适用于数据索引领域。
Description
技术领域
本发明涉及数据索引领域,更具体的,涉及一种实时数据流的后缀数组索引方法及装置。
背景技术
随着信息化的发展和大数据时代的来临,数据量呈爆炸式增长,为了支撑海量数据环境下数据的快速检索,数据索引的设计成为至关重要的环节。
在数据索引领域,倒排索引已得到广泛应用,但其对于非自然语言数据的索引准确性容易受分词效果影响,难以保证100%的查全率。不同于倒排索引,后缀数组索引无需对数据分词,可对异构数据无差别地创建索引,不仅适用于文本等自然语言数据,而且适用于二进制数据、生物信息、网络数据包等非自然语言数据,具有较好的普适性。
对于线上系统而言,实时数据流种类多样,后缀数组索引可保证对异构数据的准确索引,实现100%的查全率。然而,后缀数组索引创建效率受后缀数组构造速度的限制,且需要占用较大的内存空间。段的大小和数量也应有所平衡,单个索引过大将导致索引效率低下,索引个数过多将导致检索效率低下。鉴于后缀数组索引速度受限和空间占用大等缺陷,有必要通过相应的策略优化数据索引流程,以提升实时数据流的后缀数组索引效率。
发明内容
本发明为了解决倒排索引准确性容易受分词效果的影响,以及对异构数据的索引问题,提供了一种实时数据流的后缀数组索引方法,以及应用该索引方法的装置,其可在无需分词的情况下实时索引异构数据,并采用异步方式生成索引,加快响应时间。
为实现上述发明目的,采用的技术方案如下:一种实时数据流的后缀数组索引方法,所述后缀数组索引方法包括以下步骤:
步骤1:服务端接收实时数据流,从实时数据流提取源数据,将源数据预处理为包含一个或多个域的文档;
步骤2:解析文档,将文档按域分发,各个域接收源数据,并启动独立线程进行数据索引和存储;
步骤3:一个域由多个段组成,所述域的域对象接收源数据后不直接创建索引,而是将源数据写入段中,并设置段源数据更新信号,即可返回响应;
步骤4:若文档所有域均返回响应,则向客户端返回响应信息;
步骤5:后缀数组构造工具在后台监听段源数据更新信号,自动对段源数据构造后缀数组,生成段后缀数组;
步骤6:段源数据、段后缀数组、段信息连接成完整的后缀数组索引,源数据索引成功。
优选地,所述步骤1,实时数据流的数据类型包括自然语言数据、非自然语言数据;所述的自然语言数据包括文本,所述的非自然语言数据包括二进制数据、生物信息、网络数据包;所述从实时数据流中提取的源数据通过异步方式生成后缀数组索引,以加快响应时间。
优选地,所述步骤2,每个域的域对象都是一个单例,独立负责源数据的索引和存储,保证并发操作下的数据安全;所述域分为多个段,所有段的数据构成该域的完整数据,任意两个段之间交集为空;每个段为独立的后缀数组索引,包含段源数据、段后缀数组、段信息三部分;
1)段源数据是文档的某个域的源数据,一个段可同时存储不同文档的源数据;
2)段后缀数组是由段源数据构造得到的后缀数组,且按后缀项字典排序;
3)段信息记录该段所存储数据的元数据信息,包括段源数据大小、段ID、段内各文档ID、文档大小、文档的段内偏移。
优选地,所述步骤3,后缀数组索引采用异步方式创建,可分为写入源数据、设置信号量、返回响应、构造后缀数组、生成后缀数组索引五个步骤:
1)域对象接收源数据,将源数据写入段中;
2)域对象设置信号量,通知有段源数据更新;
3)域对象返回响应,表明数据开始索引;
4)后缀数组构造工具在后台监听段源数据更新信号,自动对段源数据创建段后缀数组;
5)段源数据、段后缀数组、段信息连接成完整的后缀数组索引。
优选地,所述步骤4,服务端向客户端返回响应信息,只表明源数据已被接收并开始索引,此时数据还无法检索;所述源数据索引操作在后台自动进行,数据索引成功后更新索引信息,此时数据可被检索;若数据索引失败,后台自动重试,直至数据索引成功。
优选地,为防止对同一源数据重复创建后缀数组索引,所述源数据总是写入新的段中,所述的段可分为临时段、动态段、持久段三种类型;
1)所述域对象接收源数据后,将源数据写入临时段,所述的临时段为新段,防止对同一源数据重复创建后缀数组索引;
2)若临时段大小或个数超过阈值,则所有临时段合并进动态段,动态段暂存于内存;
3)若动态段大小超过阈值,则将动态段持久化为持久段,持久段存储在外存;
4)若持久段个数超过阈值,则合并持久段,减少索引段个数。
优选地,为防止索引个数过多影响检索效率,提供索引段合并机制;所述后缀数组索引段合并采用源数据合并后重新构造后缀数组的方式实现,其具有线性时间复杂度;所述后缀数组索引合并过程中使用副本段保证在合并过程中不影响已有数据的检索,包括以下步骤:
1)合并时将所有待合并段的段源数据写入副本段;
2)将所有待合并段的段信息合并为副本段的段信息;
3)为副本段的段源数据创建段后缀数组;
4)副本段操作完成后,通过加锁方式将所有合并段删除,同时副本段升级为正式段,段合并完成。
优选地,所述每个段为独立的后缀数组索引,所述的段包括段源数据、段后缀数组、段信息;所述数据检索过程包括以下步骤:
1)客户端发起检索请求,指定目标索引库名称、待检索域、检索内容;若无指定待检索域,则待检索域默认为所有域;
2)服务端接收并解析检索请求,确定目标索引库,根据待检索域获取相应的域对象;
3)每个域对象启动独立的线程完成数据检索,实现对索引的并发检索;
4)因为段后缀数组已按字典排序,因此可根据检索内容在各个段的段后缀数组中通过二分查找快速定位源数据在段中的偏移地址,根据偏移地址从段信息中获取相应的文档ID;
5)若需获取文档的完整数据,则根据文档ID获取文档的所有域,在域中获取文档域源数据,文档所有域的源数据为文档的完整数据;
6)整合各个段的检索结果,得到单个域的检索结果;整合各个域的检索结果,作为最终检索结果返回给客户端。
优选地,所述后缀数组构造工具监听到段源数据更新信号后,可根据不同指标选用合适的后缀数组构造算法;所述的指标为字符集种类、数据大小、可用内存空间、可用磁盘空间、CPU核数;所述的后缀数组构造算法选择策略如下:
1)检查字符集种类,排除不支持该字符集的算法;
2)检查数据大小、可用内存空间;若数据大小不超过4GB,则选择32位版本CPU内存算法;若数据大小超过4GB但不超过可用内存空间,则选择64位版本CPU内存算法;若数据大小超过可用内存空间,则选择外存算法;
3)检查可用磁盘空间;若使用32位算法且数据大小超过可用磁盘空间的1/4,则提示失败;若使用64位算法且数据大小超过可用磁盘空间的1/5,则提示失败;
4)检查是否多核CPU;若是,选择并行算法;否则,选择串行算法。
一种基于以上所述的实时数据流的后缀数组索引方法的装置,包括源数据预处理模块、文档索引管理模块、域索引管理模块、外部工具模块、索引检索模块;
1)源数据预处理模块:接收实时数据流,从实时数据流中提取源数据,将源数据预处理为文档,并将文档传递给文档索引管理模块;所述文档由唯一的ID标识,所述文档可包含多个域;
2)文档索引管理模块:接收并解析文档,记录文档所拥有的域,将文档按域分发给域索引管理模块,各个域存储实际数据,文档的所有域构成文档的完整数据;
3)域索引管理模块:对各个域的数据进行索引和存储;记录文档数据在域中的位置和大小;记录域中的段信息、段中各文档的源数据信息;每个域由域对象独立管理,数据独立维护,数据以域为单位存储,域内数据分段,通过外部工具模块对段源数据创建段后缀数组;
4)外部工具模块:负责段源数据的后缀数组构造或合并,通过共享映射文件实现数据通信,利用信号量机制发布后缀数组构造或合并任务;外部工具模块包含多种后缀数组相关工具,可根据段源数据大小、数据类型、系统可用资源等参数选择合适算法,完成后缀数组构造或合并任务;
5)索引检索模块:负责解析检索语句,并对各个域的索引段进行独立检索;在段后缀数组中,通过二分查找快速匹配检索目标,得到匹配项的段内偏移,根据段内偏移获取相应的文档信息;整合各个域的检索结果,返回最终检索结果。
本发明的有益效果如下:本发明可对异构数据无差别地创建后缀数组索引,实现100%的查全率;后缀数组索引创建采用异步方式,只需将源数据写入段中即可返回响应,后台通过监听信号量自动创建后缀数组索引;本发明为解决段数过多导致检索效率低下的问题,提供索引合并机制,索引合并过程不影响已有数据的检索。
附图说明
图1是本发明第一实施例的数据处理流程图。
图2是本发明第一实施例的数据存储结构图。
图3是本发明第一实施例的后缀数组索引生成流程图。
图4是本发明第二实施例的实时数据流索引(无临时段)示意图。
图5是本发明第二实施例的实时数据流索引(临时段)示意图。
图6是本发明第三实施例的后缀数组索引检索流程图。
图7是本发明第四实施例的模块关系图。
图8是本发明第五实施例的文档结构示意图。
图9是本发明第五实施例的段源数据索引示意图。
具体实施方式:
下面结合附图和实施例对本发明作进一步说明。
其中,实施例1说明后缀数组索引创建流程,实施例2说明通过临时段提升索引效率的原理,实施例3说明后缀数组索引检索流程,实施例4说明后缀数组索引装置的模块关系,实施例5通过示例说明按域索引的实现流程。
实施例1
本实施例所述的一种实时数据流的后缀数组索引方法,后缀数组索引创建流程可分为数据处理与存储、生成后缀数组索引两部分。
A.数据处理与存储,如图1、图2所示,一份源数据对应一个文档,一个文档包含多个域,以域为数据存储单位;域包含多个段,段分为临时段、动态段和持久段,所述的动态段借助临时段提升索引效率;段为独立的后缀数组索引,每个段独立维护源数据和索引信息,数据处理与存储流程包括以下步骤:
A101.客户端通过HTTP请求向服务端提交索引请求,通过请求行记录索引库名称等信息,将数据作为请求体,不失一般性,本方法定义数据格式为JSON;
A102.服务端接收并解析HTTP请求,确定目标索引库名称,从实时数据流中提取源数据;
A103.将源数据预处理为包含一个或多个域的文档,为文档生成唯一文档ID;若源数据无预设的域信息,则将源数据预处理为包含默认域的文档;
A104.解析文档,将文档所包含的域信息记录在辅助数据结构DocFieldMap,所述信息记录包括记录文档ID与该文档所拥有的域,将文档按域分发,每个域启动独立的线程对数据进行索引和存储;
A105.若某个域不存在,则创建一个新的域对象,并将域名称与域对象的映射关系记录在辅助数据结构FieldMap;
A106.若文档域源数据(文档某个域的源数据)小于阈值,获取当前动态段并创建临时段,所述的临时段为新段,将文档域源数据写入临时段,更新临时段信息;
A107.若临时段个数超过阈值,将所有临时段和当前动态段合并为一个新的动态段;
A108.若文档域源数据大小超过阈值或动态段个数超过阈值,持久化为持久段,持久段存储在外存(硬盘);
A109.若持久段各组的段数超过阈值,触发持久段合并;
A110.若文档的任意一个域索引失败,则文档索引失败;
A111.若文档的所有域均索引成功,则文档索引成功。
B.生成后缀数组索引,如图3所示,域对象接收源数据后不直接对源数据创建后缀数组,而是将源数据写入段中,通过信号量机制实现后缀数组构造或合并任务的发布与处理,后缀数组构造工具可根据不同指标选择合适的后缀数组构造算法生成段后缀数组,包括以下步骤:
B101.源数据写入新段(临时段);
B102.设置信号量,通知有段源数据更新,返回响应;
B103.信号量触发后缀数组构造工具对段源数据构造后缀数组;
B104.若不是常数字符集,则使用其它字符集算法,转B110;
B105.若数据大小超过可用内存,使用外存算法,转B110;
B106.若数据大小不超过4GB且不超过可用磁盘空间的1/4,且CPU非多核心,使用32位版本内存串行算法,转B110;
B107.若数据大小不超过4GB且不超过可用磁盘空间的1/4,且CPU多核心,使用32位版本内存并行算法,转B110;
B108.若数据大小超过4GB且不超过可用磁盘空间的1/5,且CPU非多核心,使用64位版本内存串行算法,转B110;
B109.若数据大小超过4GB且不超过可用磁盘空间的1/5,且CPU多核心,使用64位版本内存并行算法,转B110;
B110.生成段后缀数组;
B111.段源数据、段后缀数组、段信息连接成完整的后缀数组索引;
B112.生成后缀数组索引(段)成功。
实施例2
一种实时数据流的后缀数组索引方法,借助临时段提升索引效率。
假设实时数据流分三个批次到达服务端,从实时数据流中分别提取源数据A、源数据B、源数据C,所述源数据的数据大小均为100MB,对该实时数据流的索引有以下两种实现:
实现一:不借助临时段
因为每次只能对一个完整的段构造后缀数组,若新数据拼接在旧数据尾部,再进行索引操作,将造成对旧数据重复创建后缀数组索引的问题,如图4所示。
T1时刻:对源数据A(100MB)创建后缀数组索引;
T2时刻:源数据B拼接在源数据A尾部,对源数据A+B(200MB)创建后缀数组索引;
T3时刻:将源数据C拼接在源数据A+B尾部,对源数据A+B+C(300MB)创建后缀数组索引。
可见,300MB源数据的索引需等待600MB数据的索引创建时间才可被检索,存在对同一源数据重复创建索引的问题,索引效率不高。
实现二:借助临时段
临时段作为更细粒度的划分,每个临时段都是一个全新的段,用于暂存已索引的数据。借助临时段,新数据不再拼接在旧数据尾部,而是写入临时段并直接创建后缀数组索引。当达到一定条件(如临时段个数达到阈值),后台自动合并临时段,且合并过程不影响已有数据的检索,如图5所示。
T1时刻:对源数据A(100MB)创建后缀数组索引;
T2时刻:对源数据B(100MB)创建后缀数组索引;
T3时刻:对源数据C(100MB)创建后缀数组索引。
可见,300MB源数据的索引只需等待300MB数据的索引创建时间即可被检索。
实施例3
一种实时数据流的后缀数组索引方法,所述后缀数组索引由段源数据、段后缀数组、段信息三部分组成,如图6所示,后缀数组索引检索流程包括以下步骤:
C101.客户端发起检索请求,指定目标索引库名称、待检索域、检索内容;若不指定目标索引库、待检索域,则默认为所有索引库、所有域;
C102.服务端接收并解析检索请求,确定目标索引库,根据待检索域获取相应的域对象;
C103.每个域对象启动独立的线程完成数据检索,读取待检索域的所有段(包括临时段、动态段和持久段),每个段独立进行检索;
C104.根据检索内容,在段后缀数组中通过二分查找快速得到匹配项的段内偏移;
C105.读取段信息,根据段内偏移获取相应的文档ID;若无需获取文档完整数据,转C107;
C106.读取辅助数据结构DocFieldMap,根据文档ID获取文档所拥有的域,在域内获取文档的域源数据,得到文档的完整数据;
C107.整合各个段的检索结果,得到当前域对象的检索结果;
C108.整合各个域的检索结果,得到最终检索结果,返回给客户端。
实施例4
如图7所示,具体来说,一种实时数据流的后缀数组索引装置,包括以下模块:源数据预处理模块、文档索引管理模块、域索引管理模块、外部工具模块、索引检索模块;
1)源数据预处理模块:接收实时数据流,从实时数据流提取源数据,将源数据预处理为包含一个或多个域的文档,传递给文档索引管理模块;
2)文档索引管理模块:接收并解析文档,记录文档所拥有的域,文档由唯一文档ID标识,一个文档包含多个域,各个域存储实际数据,文档按域分发给域索引管理模块;
3)域索引管理模块:对各个域的数据进行索引和存储;记录文档数据在域中的位置和大小;记录域中的段信息、段中各文档的源数据信息;每个域由域对象独立管理,数据独立维护,数据以域为单位存储,域内数据分段,通过外部工具模块对段源数据创建段后缀数组;
4)外部工具模块:负责段源数据的后缀数组构造或合并,通过共享映射文件实现数据通信,通过信号量机制发布后缀数组构造或合并任务;外部工具模块包含多种后缀数组相关算法,可根据段源数据大小、数据类型、系统可用资源等参数选择合适算法,完成后缀数组构造或合并任务;
5)索引检索模块:接收并解析检索语句,对各个域的索引段进行检索;每个段独立检索,通过二分查找快速匹配检索目标,得到匹配项的段内偏移,根据段内偏移获取相应的文档数据;整合各个段的检索结果,得到单个域的检索结果;整合各个域的检索结果,返回最终检索结果。
实施例5
结合上述的实施例1和实施例4,本实施例详细说明实时数据流的后缀数组索引流程:
1)客户端发起数据索引请求,指定目标索引库名称、数据内容等信息,例如:
2)服务端接收并解析数据索引请求,确定目标索引库为index_name;
3)提取源数据,将源数据预处理为文档,每个文档由唯一文档ID(自动生成)标识,文档包含多个域,上述源数据可预处理为包含四个域(分别为owner、date、content、base64)的文档,文档结构示意图如图8所示;
4)文档按域分发,域索引管理模块通过不同的域对象维护各个域,如图9所示,以域“content”为例,说明对该域的索引过程,其它域的操作相同;
5)域索引管理模块接收源数据,判断是否存在名为“content”的域对象,若不存在则创建一个新的域对象;
6)域对象将域源数据(文档“content”域的内容“Hello,world!”)写入段,设置信号量通知有段源数据更新;
7)外部工具模块监听到段源数据更新信号,对段源数据构造后缀数组,生成段后缀数组;
8)域索引管理模块将段源数据、段后缀数组、段信息连接成完整的后缀数组索引(段),此时数据已索引完成并可被检索;
9)若临时段个数超过阈值,临时段合并进动态段,避免一次检索需查找的索引段数过多,影响检索效率;
10)若动态段个数超过阈值,动态段合并为持久段,持久段存储在外存;
11)持久段按段源数据大小分组,若各组的段数超过阈值,则该组的持久段合并为一个大段;
12)若单个段的大小超过阈值,不再触发合并。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,并非是对本发明实施方式的限定。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
Claims (10)
1.一种实时数据流的后缀数组索引方法,其特征在于:所述后缀数组索引方法包括以下步骤:
步骤1:服务端接收实时数据流,从实时数据流提取源数据,将源数据预处理为包含一个或多个域的文档;
步骤2:解析文档,将文档按域分发,各个域接收源数据,并启动独立线程进行数据索引和存储;
步骤3:一个域由多个段组成,所述域的域对象接收源数据后不直接创建索引,而是将源数据写入段中,并设置段源数据更新信号,即可返回响应;
步骤4:若文档所有域均返回响应,则向客户端返回响应信息;
步骤5:后缀数组构造工具在后台监听段源数据更新信号,自动对段源数据构造后缀数组,生成段后缀数组;
步骤6:段源数据、段后缀数组、段信息连接成完整的后缀数组索引,源数据索引成功。
2.根据权利要求1所述的实时数据流的后缀数组索引方法,其特征在于:所述步骤1,实时数据流的数据类型包括自然语言数据、非自然语言数据;所述的自然语言数据包括文本,所述的非自然语言数据包括二进制数据、生物信息、网络数据包;所述从实时数据流中提取的源数据通过异步方式生成后缀数组索引,以加快响应时间。
3.根据权利要求1所述的实时数据流的后缀数组索引方法,其特征在于:所述步骤2,每个域的域对象都是一个单例,独立负责源数据的索引和存储,保证并发操作下的数据安全;所述域分为多个段,所有段的数据构成该域的完整数据,任意两个段之间交集为空;每个段为独立的后缀数组索引,包含段源数据、段后缀数组、段信息三部分;
1)段源数据是文档的某个域的源数据,一个段可同时存储不同文档的源数据;
2)段后缀数组是由段源数据构造得到的后缀数组,且按后缀项字典排序;
3)段信息记录该段所存储数据的元数据信息,包括段源数据大小、段ID、段内各文档ID、文档大小、文档的段内偏移。
4.根据权利要求1所述的实时数据流的后缀数组索引方法,其特征在于:所述步骤3,后缀数组索引采用异步方式创建,可分为写入源数据、设置信号量、返回响应、构造后缀数组、生成后缀数组索引五个步骤:
1)域对象接收源数据,将源数据写入段中;
2)域对象设置信号量,通知有段源数据更新;
3)域对象返回响应,表明数据开始索引;
4)后缀数组构造工具在后台监听段源数据更新信号,自动对段源数据创建段后缀数组;
5)段源数据、段后缀数组、段信息连接成完整的后缀数组索引。
5.根据权利要求1所述的实时数据流的后缀数组索引方法,其特征在于:所述步骤4,服务端向客户端返回响应信息,只表明源数据已被接收并开始索引,此时数据还无法检索;所述源数据索引操作在后台自动进行,数据索引成功后更新索引信息,此时数据可被检索;若数据索引失败,后台自动重试,直至数据索引成功。
6.根据权利要求2所述的实时数据流的后缀数组索引方法,其特征在于:为防止对同一源数据重复创建后缀数组索引,所述源数据总是写入新的段中,所述的段可分为临时段、动态段、持久段三种类型;
1)所述域对象接收源数据后,将源数据写入临时段,所述的临时段为新段,防止对同一源数据重复创建后缀数组索引;
2)若临时段大小或个数超过阈值,则所有临时段合并进动态段,动态段暂存于内存;
3)若动态段大小超过阈值,则将动态段持久化为持久段,持久段存储在外存;
4)若持久段个数超过阈值,则合并持久段,减少索引段个数。
7.根据权利要求3所述的实时数据流的后缀数组索引方法,其特征在于:为防止索引个数过多影响检索效率,提供索引段合并机制;所述后缀数组索引段合并采用源数据合并后重新构造后缀数组的方式实现,其具有线性时间复杂度;所述后缀数组索引合并过程中使用副本段保证在合并过程中不影响已有数据的检索,包括以下步骤:
1)合并时将所有待合并段的段源数据写入副本段;
2)将所有待合并段的段信息合并为副本段的段信息;
3)为副本段的段源数据创建段后缀数组;
4)副本段操作完成后,通过加锁方式将所有合并段删除,同时副本段升级为正式段,段合并完成。
8.根据权利要求2~7任一项所述的实时数据流的后缀数组索引方法,其特征在于:所述每个段为独立的后缀数组索引,所述的段包括段源数据、段后缀数组、段信息;所述数据检索过程包括以下步骤:
1)客户端发起检索请求,指定目标索引库名称、待检索域、检索内容;若无指定待检索域,则待检索域默认为所有域;
2)服务端接收并解析检索请求,确定目标索引库,根据待检索域获取相应的域对象;
3)每个域对象启动独立的线程完成数据检索,实现对索引的并发检索;
4)因为段后缀数组已按字典排序,因此可根据检索内容在各个段的段后缀数组中通过二分查找快速定位源数据在段中的偏移地址,根据偏移地址从段信息中获取相应的文档ID;
5)若需获取文档的完整数据,则根据文档ID获取文档的所有域,在域中获取文档域源数据,文档所有域的源数据为文档的完整数据;
6)整合各个段的检索结果,得到单个域的检索结果;整合各个域的检索结果,作为最终检索结果返回给客户端。
9.根据权利要求2~7任一项所述的实时数据流的后缀数组索引方法,其特征在于:所述后缀数组构造工具监听到段源数据更新信号后,可根据不同指标选用合适的后缀数组构造算法;所述的指标为字符集种类、数据大小、可用内存空间、可用磁盘空间、CPU核数;所述的后缀数组构造算法选择策略如下:
1)检查字符集种类,排除不支持该字符集的算法;
2)检查数据大小、可用内存空间;若数据大小不超过4GB,则选择32位版本CPU内存算法;若数据大小超过4GB但不超过可用内存空间,则选择64位版本CPU内存算法;若数据大小超过可用内存空间,则选择外存算法;
3)检查可用磁盘空间;若使用32位算法且数据大小超过可用磁盘空间的1/4,则提示失败;若使用64位算法且数据大小超过可用磁盘空间的1/5,则提示失败;
4)检查是否多核CPU;若是,选择并行算法;否则,选择串行算法。
10.一种基于权利要求1~9任一项所述的实时数据流的后缀数组索引方法的装置,其特征在于:包括源数据预处理模块、文档索引管理模块、域索引管理模块、外部工具模块、索引检索模块;
1)源数据预处理模块:接收实时数据流,从实时数据流中提取源数据,将源数据预处理为文档,并将文档传递给文档索引管理模块;所述文档由唯一的ID标识,所述文档可包含多个域;
2)文档索引管理模块:接收并解析文档,记录文档所拥有的域,将文档按域分发给域索引管理模块,各个域存储实际数据,文档的所有域构成文档的完整数据;
3)域索引管理模块:对各个域的数据进行索引和存储;记录文档数据在域中的位置和大小;记录域中的段信息、段中各文档的源数据信息;每个域由域对象独立管理,数据独立维护,数据以域为单位存储,域内数据分段,通过外部工具模块对段源数据创建段后缀数组;
4)外部工具模块:负责段源数据的后缀数组构造或合并,通过共享映射文件实现数据通信,利用信号量机制发布后缀数组构造或合并任务;外部工具模块包含多种后缀数组相关工具,可根据段源数据大小、数据类型、系统可用资源等参数选择合适算法,完成后缀数组构造或合并任务;
5)索引检索模块:负责解析检索语句,并对各个域的索引段进行独立检索;在段后缀数组中,通过二分查找快速匹配检索目标,得到匹配项的段内偏移,根据段内偏移获取相应的文档信息;整合各个域的检索结果,返回最终检索结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810983178.0A CN109299152B (zh) | 2018-08-27 | 2018-08-27 | 一种实时数据流的后缀数组索引方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810983178.0A CN109299152B (zh) | 2018-08-27 | 2018-08-27 | 一种实时数据流的后缀数组索引方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109299152A true CN109299152A (zh) | 2019-02-01 |
CN109299152B CN109299152B (zh) | 2021-11-30 |
Family
ID=65165453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810983178.0A Active CN109299152B (zh) | 2018-08-27 | 2018-08-27 | 一种实时数据流的后缀数组索引方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109299152B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110442575A (zh) * | 2019-07-01 | 2019-11-12 | 中山大学 | 一种面向科学大数据的索引生成方法和检索方法 |
CN110852046A (zh) * | 2019-10-18 | 2020-02-28 | 中山大学 | 一种文本后缀索引的分块归纳排序方法及系统 |
CN113553346A (zh) * | 2021-07-22 | 2021-10-26 | 中国电子科技集团公司第十五研究所 | 大规模实时数据流一体化处理、转发和存储方法及系统 |
WO2022016327A1 (zh) * | 2020-07-20 | 2022-01-27 | 中山大学 | 一种安全的后缀索引外包计算方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6751624B2 (en) * | 2000-04-04 | 2004-06-15 | Globalscape, Inc. | Method and system for conducting a full text search on a client system by a server system |
US20070255748A1 (en) * | 2006-04-06 | 2007-11-01 | University Di Pisa | Method of structuring and compressing labeled trees of arbitrary degree and shape |
CN101158955A (zh) * | 2007-11-15 | 2008-04-09 | 电子科技大学 | 一种中文词库的构造方法 |
CN102081673A (zh) * | 2011-01-27 | 2011-06-01 | 农革 | 后缀数组构造方法 |
CN103902599A (zh) * | 2012-12-27 | 2014-07-02 | 北京新媒传信科技有限公司 | 模糊查找的方法和装置 |
CN105335481A (zh) * | 2015-10-14 | 2016-02-17 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种大规模字符串文本的后缀索引构造方法及装置 |
-
2018
- 2018-08-27 CN CN201810983178.0A patent/CN109299152B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6751624B2 (en) * | 2000-04-04 | 2004-06-15 | Globalscape, Inc. | Method and system for conducting a full text search on a client system by a server system |
US20070255748A1 (en) * | 2006-04-06 | 2007-11-01 | University Di Pisa | Method of structuring and compressing labeled trees of arbitrary degree and shape |
CN101158955A (zh) * | 2007-11-15 | 2008-04-09 | 电子科技大学 | 一种中文词库的构造方法 |
CN102081673A (zh) * | 2011-01-27 | 2011-06-01 | 农革 | 后缀数组构造方法 |
CN103902599A (zh) * | 2012-12-27 | 2014-07-02 | 北京新媒传信科技有限公司 | 模糊查找的方法和装置 |
CN105335481A (zh) * | 2015-10-14 | 2016-02-17 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种大规模字符串文本的后缀索引构造方法及装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110442575A (zh) * | 2019-07-01 | 2019-11-12 | 中山大学 | 一种面向科学大数据的索引生成方法和检索方法 |
CN110442575B (zh) * | 2019-07-01 | 2023-07-18 | 中山大学 | 一种面向科学大数据的索引生成方法和检索方法 |
CN110852046A (zh) * | 2019-10-18 | 2020-02-28 | 中山大学 | 一种文本后缀索引的分块归纳排序方法及系统 |
WO2022016327A1 (zh) * | 2020-07-20 | 2022-01-27 | 中山大学 | 一种安全的后缀索引外包计算方法及装置 |
CN113553346A (zh) * | 2021-07-22 | 2021-10-26 | 中国电子科技集团公司第十五研究所 | 大规模实时数据流一体化处理、转发和存储方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109299152B (zh) | 2021-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109299152A (zh) | 一种实时数据流的后缀数组索引方法及装置 | |
US9753960B1 (en) | System, method, and computer program for dynamically generating a visual representation of a subset of a graph for display, based on search criteria | |
CN106326381B (zh) | 基于MapDB构建的HBase数据检索方法 | |
US20170063695A1 (en) | Full flow retrieval optimized packet capture | |
CN101765842B (zh) | 用于xml策略匹配的方法和装置 | |
CN107038207A (zh) | 一种数据查询方法、数据处理方法及装置 | |
US8200702B2 (en) | Independently variably scoped content rule application in a content management system | |
CN107045531A (zh) | 一种优化hdfs小文件存取的系统及方法 | |
CN108255972A (zh) | 一种全文检索方法及系统 | |
CN109284273B (zh) | 一种采用后缀数组索引的海量小文件查询方法及系统 | |
US20180067941A1 (en) | Media Search Processing Using Partial Schemas | |
CN109830285B (zh) | 一种医学影像文件处理方法和装置 | |
CN111813849A (zh) | 数据抽取方法、装置及设备、存储介质 | |
US7051016B2 (en) | Method for the administration of a data base | |
Schaffert et al. | The linked media framework: Integrating and interlinking enterprise media content and data | |
CN111949619A (zh) | 动态目录生成方法、系统、电子设备及存储介质 | |
CN111897828A (zh) | 数据批处理实现方法、装置、设备及存储介质 | |
US20110179036A1 (en) | Methods and Apparatuses For Abstract Representation of Financial Documents | |
CN112765131A (zh) | 一种异构医疗健康数据存储和检索方法及系统 | |
CN107729432A (zh) | 一种分布式小文件的存储、读取方法、装置及存取系统 | |
CN116680237A (zh) | 一种基于云存储的文件整理方法、系统和存储介质 | |
US20120192046A1 (en) | Generation of a source complex document to facilitate content access in complex document creation | |
US20120117449A1 (en) | Creating and Modifying an Image Wiki Page | |
Wang | Automated semantic correlation between multiple schema for information exchange | |
CN112861495A (zh) | 一种基于Excel模板文件生成ImpalaSQL语句的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |