CN110597855A - 一种数据存储方法、终端设备及计算机可读存储介质 - Google Patents

一种数据存储方法、终端设备及计算机可读存储介质 Download PDF

Info

Publication number
CN110597855A
CN110597855A CN201910749968.7A CN201910749968A CN110597855A CN 110597855 A CN110597855 A CN 110597855A CN 201910749968 A CN201910749968 A CN 201910749968A CN 110597855 A CN110597855 A CN 110597855A
Authority
CN
China
Prior art keywords
index
target
linked list
character string
search keyword
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
Application number
CN201910749968.7A
Other languages
English (en)
Other versions
CN110597855B (zh
Inventor
彭炯瑜
解静仪
农革
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Yat Sen University
Original Assignee
Sun Yat Sen University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sun Yat Sen University filed Critical Sun Yat Sen University
Priority to CN201910749968.7A priority Critical patent/CN110597855B/zh
Publication of CN110597855A publication Critical patent/CN110597855A/zh
Application granted granted Critical
Publication of CN110597855B publication Critical patent/CN110597855B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2457Query processing with adaptation to user needs
    • G06F16/24573Query processing with adaptation to user needs using data annotations, e.g. user-defined metadata

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请适用于数据处理技术领域,提供了一种数据存储方法、终端设备及计算机可读存储介质,包括:获取搜索关键词,从缓存中查找与搜索关键词的首字符对应的目标链表;检测目标链表中是否存在与搜索关键词相匹配的目标索引;若目标链表中不存在与搜索关键词相匹配的目标索引,则从磁盘中查找并获取与搜索关键词相匹配的目标索引;将目标索引添加至缓存中的目标链表中,并输出目标索引对应的后缀字符串;若目标链表中存在与搜索关键词相匹配的目标索引,则获取并输出目标索引对应的后缀字符串,从而提高了数据查询效率,缩短了数据查询时间。

Description

一种数据存储方法、终端设备及计算机可读存储介质
技术领域
本申请属于数据处理技术领域,尤其涉及一种数据存储方法、终端设备及计算机可读存储介质。
背景技术
基于后缀索引的搜索引擎是以字符串的后缀字符串为索引的搜索引擎,现有的基于后缀索引的搜索引擎通常将索引存储在磁盘中,这样,终端设备每处理一次查询请求,都需要将所有索引从磁盘加载到内存中,再从加载到内存的索引中查找符合要求的索引。然而,由于磁盘中存储的大部分索引是很少被检索到的,因此,每次处理查询请求时都将所有索引加载到内存中会降低数据查询效率,延长数据查询时间。
发明内容
有鉴于此,本申请实施例提供了一种数据存储方法、终端设备及计算机可读存储介质,以解决现有的基于后缀索引的数据存储方法所导致的数据查询效率低,数据查询时间长的问题。
本申请实施例的第一方面提供了一种数据存储方法,包括:
获取搜索关键词,从缓存中查找与所述搜索关键词的首字符对应的目标链表;所述目标链表用于存储以所述搜索关键词的首字符为首字符的后缀字符串对应的索引的信息;
检测所述目标链表中是否存在与所述搜索关键词相匹配的目标索引;
若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则从磁盘中查找并获取与所述搜索关键词相匹配的目标索引;
将所述目标索引添加至所述缓存中的所述目标链表中,并输出所述目标索引对应的后缀字符串;
若所述目标链表中存在与所述搜索关键词相匹配的目标索引,则获取并输出所述目标索引对应的后缀字符串。
进一步的,所述索引的信息包括最长公共前缀长度、源位置标识、非公共字符串、被检索次数及后继索引的地址;所述最长公共前缀长度用于描述所述索引对应的后缀字符串与其前继后缀字符串的最长公共前缀的长度,所述源位置标识用于描述所述索引对应的后缀字符串在源文件中的位置,所述非公共字符串用于描述所述索引对应的后缀字符串与其前继后缀字符串的预设长度的非公共字符串,所述被检索次数用于描述所述索引被检索到的次数,所述后继索引的地址用于描述所述索引的后继索引在所述目标链表中的地址;
所述检测检测所述目标链表中是否存在与所述搜索关键词相匹配的目标索引,包括:
检测所述目标链表中的第一个索引是否为空;
若所述目标链表中的第一个索引不为空,则获取所述第一个索引的非公共字符串,将预先定义的初始长度为0的字符串变量与所述第一个索引的非公共字符串进行组合得到所述第一个索引对应的后缀字符串,将所述第一个索引对应的后缀字符串与所述搜索关键词进行对比;
若所述第一个索引对应的后缀字符串与所述搜索关键词相等,则将所述第一个索引确定为与所述搜索关键词相匹配的目标索引;
获取所述第一个索引的各个后续索引的最长公共前缀长度;
若所述第一个索引的后续索引的最长公共前缀长度大于或等于所述搜索关键词的长度,则将所述第一个索引的后续索引确定为与所述搜索关键词相匹配的目标索引。
进一步的,所述将所述第一个索引对应的后缀字符串与所述搜索关键词进行对比之后,还包括:
若所述第一个索引对应的后缀字符串小于所述搜索关键词,则获取所述第一个索引的各个后续索引的最长公共前缀长度及非公共字符串,从各个所述后续索引的前继索引对应的后缀字符串中提取前n个字符,得到各个所述后续索引的待组合字符,将每一所述后续索引的所述待组合字符与该后续索引的非公共字符串进行组合,得到每一所述后继索引对应的后缀字符串;其中,n为所述后继索引的最长公共前缀长度;
依次将所述第一个索引的各个所述后继索引对应的后缀字符串与所述搜索关键词进行大小对比,基于对比结果确定所述第一个索引的后继索引是否为与所述搜索关键词相匹配的目标索引。
进一步的,所述若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则从磁盘中查找与所述搜索关键词相匹配的目标索引,包括:
若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则基于二分法从磁盘中存储的索引文件中确定待查找的索引,并获取所述待查找的索引的源位置标识;
基于所述待查找的索引的源位置标识,从所述磁盘中存储的源文件中获取所述待查找的索引对应的后缀字符串;
若所述待查找的索引对应的后缀字符串中包含所述搜索关键词,则将所述待查找的索引确定为与所述搜索关键词相匹配的目标索引。
进一步的,所述将所述目标索引添加至所述缓存中的所述目标链表中,包括:
确定所述目标链表的剩余存储量;
若所述目标索引的总数据量小于或等于所述目标链表的剩余存储量,则将所述目标索引添加至所述缓存中的所述目标链表中;
若所述目标索引的总数据量大于所述目标链表的剩余存储量,则对所述缓存中除所述目标链表之外的链表的存储空间进行缩减,对所述目标链表的存储空间进行扩充,直至所述目标链表的剩余存储量大于或等于所述目标索引的总数据量,将所述目标索引添加至扩充后的所述目标链表中。
进一步的,所述对所述缓存中除所述目标链表之外的链表的存储空间进行缩减,对所述目标链表的存储空间进行扩充,包括:
从除所述目标链表之外的其余链表中确定已存数据量小于可存数据量的一半的待缩减链表;
将所述待缩减链表的存储空间缩减一半,并基于所述待缩减链表所缩减的存储空间对所述目标链表的存储空间进行扩充,直至所述目标链表的剩余存储量大于或等于所述目标索引的总数据量。
进一步的,所述将所述目标索引添加至所述缓存中的所述目标链表中,包括:
基于所述目标索引、所述目标链表中各个索引的最长公共前缀长度及非公共字符串,确定待存储所述目标索引的目标节点;
将所述目标索引存储至所述目标链表中的所述目标节点中。
本申请实施例的第二方面提供了一种终端设备,包括:
第一查找单元,用于获取搜索关键词,从缓存中查找与所述搜索关键词的首字符对应的目标链表;所述目标链表用于存储以所述搜索关键词的首字符为首字符的后缀字符串对应的索引的信息;
第一检测单元,用于检测所述目标链表中是否存在与所述搜索关键词相匹配的目标索引;
第二查找单元,用于若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则从磁盘中查找并获取与所述搜索关键词相匹配的目标索引;
数据添加单元,用于将所述目标索引添加至所述缓存中的所述目标链表中,并输出所述目标索引对应的后缀字符串;
数据输出单元,用于若所述目标链表中存在与所述搜索关键词相匹配的目标索引,则获取并输出所述目标索引对应的后缀字符串。
本申请实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面的各个步骤。
本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现第一方面的各个步骤。
本申请实施例的第五方面提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面中任一项所述的数据存储方法。
实施本申请实施例提供的一种数据存储方法及设备具有以下有益效果:
本申请实施例提供的一种数据存储方法在获取到搜索关键词后,先从缓存中查找与搜索关键词相匹配的索引;当缓存中存在与搜索关键词相匹配的目标索引时,直接从缓存中获取并输出与目标索引对应的后缀字符串,由于该种情况无需从磁盘中查找数据,从而缩短了数据查询时间,提高了数据查询效率;当缓存中不存在与搜索关键词相匹配的目标索引时,才从磁盘中获取与搜索关键词相匹配的目标索引,并将目标索引添加至缓存中,以便后续可以从缓存中直接查找到该目标索引,该种情况减少了访问磁盘的次数,同样也缩短了数据查询时间,提高了数据查询效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请第一实施例提供的一种数据存储方法的实现流程图;
图2是本申请第二实施例提供的一种数据存储方法中S3的具体实现流程图;
图3是本申请第三实施例提供的一种数据存储方法中S2的具体实现流程图;
图4是本申请第四实施例提供的一种数据存储方法中S4的具体实现流程图;
图5是本申请一实施例提供的一种终端设备的结构框图;
图6是本申请另一实施例提供的一种终端设备的示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
请参阅图1,图1是本申请第一实施例提供的一种数据存储方法的实现流程图。本实施例中,流程的执行主体为终端设备。该终端设备包括但不限于:服务器、计算机、智能手机以及平板电脑等能够执行数据存储操作的设备。如图1所示的数据存储方法包括以下步骤:
S1:获取搜索关键词,从缓存中查找与所述搜索关键词的首字符对应的目标链表;所述目标链表用于存储以所述搜索关键词的首字符为首字符的后缀字符串对应的索引的信息。
当用户需要通过搜索引擎查找与某关键词相关的信息时,用户可以在搜索引擎的搜索框中输入搜索关键词,终端设备获取用户在搜索框中输入的搜索关键词,并从终端设备的缓存中查找与搜索关键词的首字符对应的目标链表。
需要说明的是,本申请实施例中的搜索引擎是基于后缀索引的搜索引擎,基于后缀索引的搜索引擎指以字符串的后缀字符串为索引的搜索引擎。一个字符串的后缀字符串指从该字符串的某个位置i开始到该字符串的末尾j结束的子串,其中,i为小于或等于j的整数,j为字符串的总字符数。字符串的所有后缀字符串按照字典顺序排序后构成的字符串数组为该字符串的后缀数组。示例性的,假设某字符串为mississipp$,则该字符串包括11个后缀字符串,分别如下:mississipp$、ississipp$、ssissipp$、sissipp$、issipp$、ssipp$、sipp$、ipp$、pp$、p$及$,该字符串的后缀数组为:
本申请实施例中,基于后缀索引的搜索引擎用于从源文件中查找包含搜索关键词的字符串。其中,源文件中包含至少一个字符串,源文件存储在终端设备的磁盘中。在实际应用中,为了方便数据查找,通常会在磁盘中建立源文件的索引文件,索引文件用于存储源文件中的所有字符串的后缀字符串对应的索引的信息。索引文件中的各个索引按照各个索引对应的后缀字符串的字典顺序进行排序,索引文件中的每个索引均包括:最长公共前缀长度、源位置标识及非公共字符串这三项信息。
其中,最长公共前缀长度用于描述索引对应的后缀字符串与其前继后缀字符串的最长公共前缀的长度,后缀字符串的前继后缀字符串指与该后缀字符串相邻且按照字典顺序排列在该后缀字符串之前的后缀字符串。例如,若按字典顺序排列的某相邻两个后继字符串分别为ssip和ssissipp,则后缀字符串ssissipp的前继后置字符串为ssip。
源位置标识源位置标识用于描述索引对应的后缀字符串在源文件中的位置,具体用于描述索引对应的后缀字符串的首字符在源文件中的排列顺序,其可以通过数字序号来表示。示例性的,假设源文件中有一字符串为mississipp$,由于该字符串的其中一个后缀字符串ssipp$的首字符在源文件中的排列顺序为5,因此,该后缀字符串ssipp$在源文件中的位置为5。
非公共字符串用于描述索引对应的后缀字符串与其前继后缀字符串的预设长度的非公共字符串。其中,某后缀字符串与其前继后缀字符串的非公共字符换指该后缀字符串中除了该后缀字符串与其前继后缀字符串的公共前缀之外的其余字符串。预设长度可以根据实际需求设置,此处不做限制。示例性的,若按字典顺序排列的某相邻两个后继字符串分别为ssip和ssissipp,则后缀字符串ssissipp与其前继后缀字符串ssip的公共前缀为ssi,后缀字符串ssissipp与其前继后缀字符串ssip的非公共字符串为ssipp,假设预设长度为4,则后缀字符串ssissipp与其前继后缀字符串ssip的预设长度的非公共字符串为ssip。
示例性的,假设源文件中仅包括一个字符串mississipp$,则该源文件的索引文件如下表1所示。其中,表1中的序号用于描述该字符串的所有后缀字符串按照字典顺序的排序。
表1
本申请实施例中,缓存由一个长度为N的数组及N个链表组成。其中,N为预先定义的编码字符集所包含的字符的总数,长度为N的数组即包含N个元素的数组,数组中的每一元素对应编码字符集中的一个字符,且数组中的每一元素对应缓存中的一个链表,具体的,数组中的每一元素对应的字符即为该元素对应的链表的标识,也即为该元素对应的链表中存储的所有索引对应的后缀字符串的首字符。示例性地,假如预先定义的编码字符集为英文字符集,由于英文字符集包含a~z这26个英文字符,因此,缓存由一个长度为26的数组及26个链表组成。其中,数组中的26个元素分别对应a~z这26个英文字符;与字符a对应的元素,其对应的链表中存储的所有索引对应的后缀字符串的首字符均为a,以此类推,与字符z对应的元素,其对应的链表中存储的所有索引对应的后缀字符串的首字符均为z。
数组的每一元素中均存放了该元素对应的链表的表头结点在缓存中的存储地址、该元素对应的链表的可存数据量、该元素对应的链表的已存数据量及该元素对应的链表的标识。其中,某元素对应的链表的可存数据量用于描述该元素对应的链表中能够存储的索引数量;某元素对应的链表的已存数据量用于描述该元素对应的链表中已存储的索引数量;某元素对应的链表的标识即为该元素对应的字符,例如,若数组中某元素对应的字符为a,则该元素对应的链表的标识为a。
链表用于存储以链表的标识为首字符的后缀字符串对应的索引的信息。链表中的一个节点用于存储一个索引的信息。本申请实施例中,链表中存储的索引的信息包括:长公共前缀长度、源位置标识、非公共字符串、被检索次数及后继索引的地址。其中,索引的被检索次数用于描述该索引被检索到的次。索引的后继索引的地址用于描述该索引的后继索引在目标链表中的地址,需要说明的是,某索引的后继索引指该索引对应的节点的下一个节点中的索引。
本申请实施例中,终端设备获取到搜索关键词后,确定搜索关键词的首字符,基于搜索关键词的首字符从缓存中的数组中确定与搜索关键词的首字符对应的目标元素,从目标元素中获取该目标元素对应的目标链表的表头结点在缓存中的存储地址,基于目标链表的表头结点在缓存中的存储地址查找与搜索关键词的首字符对应的目标链表,即目标链表用于存储以搜索关键词的首字符为首字符的后缀字符串对应的索引的信息。
S2:检测所述目标链表中是否存在与所述搜索关键词相匹配的目标索引。
本申请实施例中,终端设备通过检测目标链表中的各个索引对应的后缀字符串中是否包含搜索关键词,来检测目标链表中是否存在与搜索关键词相匹配的目标索引。
具体的,终端设备若检测到目标链表中的某索引对应的后缀字符串中包含搜索关键词,则确定该索引与搜索关键词相匹配,即确定目标链表中存在与搜索关键词相匹配的目标索引,终端设备将与搜索关键词相匹配的索引确定为目标索引,并执行S5;终端设备若检测到目标链表中的所有索引各自对应的后缀字符串中均不包含搜索关键词,则确定目标链表中的所有索引均与搜索关键词不匹配,即确定目标链表中不存在与搜索关键词相匹配的目标索引,此时,终端设备执行S3~S4。
S3:若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则从磁盘中查找并获取与所述搜索关键词相匹配的目标索引。
本申请实施例中,终端设备在检测到目标链表中不存在与搜索关键词相匹配的目标索引时,说明与搜索关键词相匹配的目标索引还未被检索过,此时,终端设备从磁盘中查找与搜索关键词相匹配的目标索引。
作为本申请一实施例,S3可以通过如图2所示的S31~S23实现,详述如下:
S31:若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则基于二分法从磁盘中存储的索引文件中确定待查找的索引,并获取所述待查找的索引的源位置标识。
本实施例中,终端设备若检测到目标链表中不存在与搜索关键词相匹配的目标索引,则基于二分法从磁盘中的索引文件中确定待查找的索引,并从索引文件中获取待查找的索引的源位置标识。其中,待查找的索引指基于二分法确定出的位于各个查找阈的中间位置的索引,查找阈指在索引文件中的查找范围。
S32:基于所述待查找的索引的源位置标识,从所述磁盘中存储的源文件中获取所述待查找的索引对应的后缀字符串。
终端设备获取到待查找的索引对应的后缀字符串后,将待查找的索引对应的后缀字符串与搜索关键词进行对比。终端设备若检测到待查找的索引对应的后缀字符串中包含搜索关键词,则执行S33。
S33:若所述待查找的索引对应的后缀字符串中包含所述搜索关键词,则将所述待查找的索引确定为与所述搜索关键词相匹配的目标索引。
本实施例中,终端设备若检测到待查找的索引对应的后缀字符串中包含搜索关键词,则待查找的索引确定为与搜索关键词相匹配的目标索引,并执行S4,即,将目标索引添加至缓存中的目标链表中。
S4:将所述目标索引添加至所述缓存中的所述目标链表中,并输出所述目标索引对应的后缀字符串。
本申请实施例中,终端设备从磁盘中获取到与搜索关键词相匹配的目标索引后,将获取到的目标索引***目标链表中的相应节点,使得***目标索引后的目标链表中的各个索引依旧按照各个索引对应的后缀字符串的字典顺序排列且服务器输出与目标索引对应的后缀字符串。
S5:若所述目标链表中存在与所述搜索关键词相匹配的目标索引,则获取并输出所述目标索引对应的后缀字符串。
本申请实施例中,终端设备若检测到目标链表中存在与搜索关键词相匹配的目标索引,则获取并输出该目标索引对应的后缀字符串。终端设备获取目标索引对应的后缀字符串具体为:获取该目标索引的最长公共前缀长度及非公共字符串,基于该目标索引的最长公共前缀长度及该目标索引的前继索引对应的后缀字符串确定目标索引的待组合字符,将目标索引的待组合字符与目标索引的非公共字符串进行组合,得到目标索引的后缀字符串。目标索引的前继索引指与该目标索引相邻且按照字典顺序排序在该目标索引之前的索引。
以上可以看出,本申请实施例提供的一种数据存储方法在获取到搜索关键词后,先从缓存中查找与搜索关键词相匹配的索引;当缓存中存在与搜索关键词相匹配的目标索引时,直接从缓存中获取并输出与目标索引对应的后缀字符串,由于该种情况无需从磁盘中查找数据,从而缩短了数据查询时间,提高了数据查询效率;当缓存中不存在与搜索关键词相匹配的目标索引时,才从磁盘中获取与搜索关键词相匹配的目标索引,并将目标索引添加至缓存中,以便后续可以从缓存中直接查找到该目标索引,该种情况减少了访问磁盘的次数,同样也缩短了数据查询时间,提高了数据查询效率。
请参阅图3,图3是本申请第二实施例提供的一种数据存储方法中S2的具体实现流程图。如图3所示,相对于图1所述的实施例,本实施例提供的一种数据存储方法中S2具体包括S21~S27,详述如下:
S21:检测所述目标链表中的第一个索引是否为空。
本实施例中,目标链表的第一个索引为存储在目标链表的第一个节点中的索引,目标链表的第一个节点为目标链表的表头节点的后一个节点。终端设备从缓存中的数组中包含的与目标链表对应的元素中获取目标链表的表头节点在缓存中的存储地址,基于目标链表的表头节点在缓存中的存储地址查找目标链表的表头节点,从目标链表的表头节点中获取目标链表的第一个索引的地址,基于目标链表的第一个索引的地址定位目标链表中的第一个索引,并检测目标链表中的第一个索引是否为空。
S22:若所述目标链表中的第一个索引不为空,则获取所述第一个索引的非公共字符串,将预先定义的初始长度为0的字符串变量与所述第一个索引的非公共字符串进行组合得到所述第一个索引对应的后缀字符串,将所述第一个索引对应的后缀字符串与所述搜索关键词进行对比。
本实施例中,终端设备可以预先定义一字符串变量preString,并定义该字符串变量preString的初始长度为0。
终端在检测到目标链表中的第一个索引不为空时,获取第一个索引的最长公共前缀长度及非公共字符串,将预先定义的初始长度为0的字符串变量preString与第一个索引的非公共字符串进行组合得到第一个索引对应的后缀字符串,将第一个索引对应的后缀字符串与搜索关键词进行对比。其中,将字符串变量preString与第一个索引的非公共字符串进行组合为:按照字符串变量preString在前、第一个索引的非公共字符串在后的顺序将两个字符串进行拼接。示例性的,假设搜索关键词为ssi,目标链表中存储的索引的信息如下表2所示:
表2
由于表2中的第一索引的非公共字符串为sipp,因此,终端设备将初始长度为0的字符串变量preString与该非公共字符串sipp进行组合后得到第一个索引对应的后缀字符串为sipp,终端设备将第一个索引对应的后缀字符串sipp与搜索关键词ssi进行对比。
终端设备若检测到第一个索引对应的后缀字符串与搜索关键词相等,则执行S23~S25;终端设备若检测到第一个索引对应的后缀字符串小于搜索关键词,则执行S26~S27;终端设备若检测到第一个索引对应的后缀字符串大于搜索关键词,则确定目标链表中不存在与搜索关键词相匹配的目标索引,此时终端设备执行S3。
需要说明的是,两个字符串相等指两个字符串完全相同;第一字符串大于第二字符串指基于字典顺序排列时第一字符串排列在第二字符串之后;第一字符串小于第二字符串指基于字典顺序排列时第一字符串排列在第二字符串之前。
S23:若所述第一个索引对应的后缀字符串与所述搜索关键词相等,则将所述第一个索引确定为与所述搜索关键词相匹配的目标索引。
本实施例中,终端设备在检测到第一个索引对应的后缀字符串与搜索关键词相等时,将第一个索引确定为与搜索关键词相匹配的目标索引,即确定目标链表中存在与搜索关键词相匹配的目标索引,此时,终端设备执行S5,即获取并输出目标索引对应的后缀字符串,同时,终端设备继续执行S24。
S24:获取所述第一个索引的各个后续索引的最长公共前缀长度。
由于目标链表中的各个索引是按照各个索引对应的后缀字符串的字典顺序进行排序的,因此,排列在后的索引对应的后缀字符串大于排列在前的索引对应的后缀字符串,当目标链表中的某索引对应的后缀字符串中包含搜索关键词,且该索引的后继索引的最长公共前缀长度大于或等于搜索关键词的长度时,说明该索引的后继索引对应的后缀字符串中也包含搜索关键词。
基于此,本实施例中,终端设备在确定了第一个索引为与搜索关键词相匹配的目标索引后,依次获取第一个索引的各个后续索引的最长公共前缀长度。其中,第一个索引的后续索引指按照字典顺序排列在第一个索引之后的各个索引,第一个索引的后续索引可以是一个索引,也可以是多个索引,具体依实际情况而定。终端设备按照顺序每获取到一个第一个索引的后续索引后,便并将该后续索引的最长公共前缀长度与搜索关键词的长度进行对比,当第一个索引的某后续索引的最长公共前缀长度小于搜索关键词的长度时,说明该后续索引对应的字符串中不包含搜索关键词;当第一个索引的某后续索引的最长公共前缀长度大于或等于搜索关键词的长度时,说明该后续索引对应的字符串中包含搜索关键词,此时终端设备执行S25。
S25:若所述第一个索引的后续索引的最长公共前缀长度大于或等于所述搜索关键词的长度,则将所述第一个索引的后续索引确定为与所述搜索关键词相匹配的目标索引。
本实施例中,终端设备在检测到第一个索引的某后续索引的最长公共前缀长度大于或等于搜索关键词的长度时,则将该后续索引确定为与搜索关键词相匹配的目标索引,同时终端设备还执行S5,即获取并输出目标索引对应的后缀字符串。
作为本申请另一实施例,终端设备在检测到第一个索引的某后续索引的最长公共前缀长度小于搜索关键词的长度时,说明第一个索引的后续索引与搜索关键词均不匹配,此时,目标索引仅包含第一个索引,终端设备输出与第一个索引对应的后缀字符串。
S26:若所述第一个索引对应的后缀字符串小于所述搜索关键词,则获取所述第一个索引的各个后续索引的最长公共前缀长度及非公共字符串,从各个所述后续索引的前继索引对应的后缀字符串中提取前n个字符,得到各个所述后续索引的待组合字符,将每一所述后续索引的所述待组合字符与该后续索引的非公共字符串进行组合,得到每一所述后继索引对应的后缀字符串;其中,n为所述后继索引的最长公共前缀长度。
本实施例中,终端设备在检测到第一个索引对应的后缀字符串小于搜索关键词时,说明第一个索引与搜索关键词不匹配,此时,终端设备继续检测第一个索引的后续索引是否与搜索关键词相匹配。需要说明的是,本申请实施例中,某索引的后续索引指按照字典顺序排列在该索引之后的所有索引,某索引的后续索引可以是一个,也可以是多个,具体根据实际情况确定,此处不做限制。
具体的,终端设备获取第一个索引的各个后续索引的最长公共前缀长度及非公共字符串,从各个后续索引的前继索引对应的后缀字符串中提取前n个字符,得到各个后续索引的待组合字符,将每一后续索引的待组合字符与该后续索引的非公共字符串进行组合,得到每一后续索引对应的后缀字符串。其中,n为每一后续索引的最长公共前缀长度。需要说明的是,本申请实施例中,某索引的前继索引指与该索引相邻且按照字典顺序排列在该索引之前的索引,每一索引的前继索引只有一个。
示例性的,如表2所示,由于第一个索引对应的后缀字符串为sipp,第二个索引的最长公共前缀长度为2,则从第一个索引对应的后缀字符串中提取前2个字符si,si即为第二个索引的待组合字符,将第二索引的待组合字符si与第二个索引的非公共字符串ssip进行组合,得到第二个索引对应的后缀字符串为sissip。由于第二个索引对应的后缀字符串为sissip,第三个索引的最长公共前缀长度为1,则从第二个索引对应的后缀字符串中提取前1个字符s,s即为第三个索引的待组合字符,将第三索引的待组合字符s与第三个索引的非公共字符串sipp进行组合,得到第三个索引对应的后缀字符串为ssipp,依次类推,可以得到第一个索引的各个后续索引的后缀字符串。
S27:依次将所述第一个索引的各个所述后继索引对应的后缀字符串与所述搜索关键词进行大小对比,基于对比结果确定所述第一个索引的后继索引是否为与所述搜索关键词相匹配的目标索引。
本实施例中,终端设备获取到第一个索引的各个后续索引的后缀字符串后,依次将每一个所述后续索引对应的后缀字符串与搜索关键词进行大小比较。
终端设备若检测到某一后续索引对应的后缀字符串与搜索关键词相等,则确定该后续索引为与搜索关键词相匹配的目标索引,终端设备获取并输出该后续索引对应的后缀字符串,同时,终端设备将该后续索引的各个后续索引的最长公共前缀长度与搜索关键词的长度进行对比,若该后续索引的某后续索引的最长公共前缀长度大于或等于搜索关键词的长度时,说明该后续索引的该后继索引对应的后缀字符串中也包含搜索关键词,将该后续索引的该后续索引确定为与搜索关键词相匹配的目标索引。
终端设备若检测到某一后续索引对应的后缀字符串大于搜索关键词,则确定第一个索引的后续索引中没有与搜索关键词相匹配的目标索引。
终端设备若检测到某一后续索引对应的后缀字符串小于搜索关键词,则继续比较该后续索引的后继索引与搜索关键词的大小,基于对比结果确定各个后续索引是否与搜索关键词匹配,如此循环,可查找到目标链表中所有与搜索关键词相匹配的目标索引。
以上可以看出,本实施例提供的一种数据存储方法在确定了某一索引与搜索关键词相匹配时,通过将该索引的后续索引的最长公共前缀长度与搜索关键词的长度进行比较,来确定该索引的后续索引是否与搜索关键词相匹配,从而无需将每个索引对应的后缀字符串均与搜索关键词进行比较,进而节省了数据检索时间,提高了数据检索效率。
请参阅图4,图4是本申请第四实施例提供的一种数据存储方法中S4的具体实现流程图。如图4所示,相对于图1所述的实施例,本实施例提供的一种数据存储方法中S4具体包括S41~S43,详述如下:
S41:确定所述目标链表的剩余存储量。
本申请实施例中,终端设备从磁盘中获取到目标索引后,在将目标索引添加至缓存中的目标链表中之前,终端设备从缓存中的数组中与目标链表对应的元素中获取目标链表的可存数据量及已存数据量,基于目标链表的可存数据量及已存数据量确定目标链表的剩余存储量。
终端设备确定了目标链表的剩余存储量后,将从磁盘中获取到的目标索引的总数据量与目标链表的剩余存储量进行对比。终端若检测到目标索引的总数据量小于或等于目标链表的剩余存储量,则执行S42;终端若检测到目标索引的总数据量大于目标链表的剩余存储量,则执行S43。
S42:若所述目标索引的总数据量小于或等于所述目标链表的剩余存储量,则将所述目标索引添加至所述缓存中的所述目标链表中。
本实施中,终端若检测到目标索引的总数据量小于或等于目标链表的剩余存储量,则说明目标链表的剩余空间足以存下目标索引,此时,终端设备直接将目标索引添加至缓存中的目标链表中。
S43:若所述目标索引的总数据量大于所述目标链表的剩余存储量,则对所述缓存中除所述目标链表之外的链表的存储空间进行缩减,对所述目标链表的存储空间进行扩充,直至所述目标链表的剩余存储量大于或等于所述目标索引的总数据量,将所述目标索引添加至扩充后的所述目标链表中。
本实施例中,终端设备若检测到目标索引的总数据量大于目标链表的剩余存储量,则说明目标链表的剩余空间不足以存下目标索引,此时,终端设备对缓存中除目标链表之外的其他链表的存储空间进行缩减,对目标链表的存储空间进行扩充,直至将目标链表的剩余存储量扩充至大于或等于目标索引的总数据量为止,才将目标索引添加至扩充后的目标链表中。
作为本申请一实施例,对所述缓存中除所述目标链表之外的链表的存储空间进行缩减,对所述目标链表的存储空间进行扩充,具体可以包括以下步骤:
从除所述目标链表之外的其余链表中确定已存数据量小于可存数据量的一半的待缩减链表;
将所述待缩减链表的存储空间缩减一半,并基于所述待缩减链表所缩减的存储空间对所述目标链表的存储空间进行扩充,直至所述目标链表的剩余存储量大于或等于所述目标索引的总数据量。
本实施例中,终端设备在检测到目标索引的总数据量大于目标链表的剩余存储量时,获取除了目标链表之外的其余各个链表的可存数据量及已存数据量,从除了目标链表之外的其余所有链表中确定已存数据量小于可存数据量的一半的待缩减链表,将待缩减链表的存储空间缩减一半,并基于待缩减链表所缩减存储空间对目标链表的存储空间进行扩充,即待缩减链表缩减了多少存储空间便将目标链表扩充多少存储空间,直至扩充后的目标链表的剩余存储量大于或等于目标索引的总数据量。
作为本发明一实施例,若将所有待缩减链表的存储空间进行缩减,并基于所有待缩减链表所缩减的存储空间对目标链表的存储空间进行相应扩充后,目标链表的剩余存储量还是小于目标索引的总数据量,则终端设备需要从各个链表中删除一些索引,并再次基于所删除的索引的总数对删除了索引的链表的存储空间进行缩减,对目标链表的存储空间进行扩充,直至所删除的索引的总数与扩充后的目标链表的剩余存储量之和大于或等于目标索引的总数据量为止。
作为本实施例一种可能的实现方式,终端设备可以从各个链表中删除被检索次数小于该链表对应的被检索次数阈值的索引。其中,每一链表对应的被检索次数阈值可以通过该链表中存储的被检索次数的最大值及最小值确定,具体的,某链表的被检索次数阈值可以为(max+min)/2,其中,max为链表中存储的被检索次数的最大值,min为链表中存储的被检索次数的最小值。
作为本实施例另一种可能实现的方式,链表中存储的索引的信息还包括索引的被检索时间。基于此,终端设备可以删除链表中被检索时间与当前时间之间的时间间隔大于预设时长的索引。其中,预设时长可以根据实际需求设置。
需要说明的是,由于从链表中删除一些索引后链表中剩余某些索引的顺序会发生变化,也就是说,链表中剩余某些索引的前继索引和后继索引会发生变化,因此,在从链表中删除某些索引后,对链表中剩余索引的最长公共前缀长度及非公共字符串进行更新。
作为本申请一实施例,所述将所述目标索引添加至扩充后的所述目标链表中,具体可以包括以下步骤:
基于所述目标索引、所述目标链表中各个索引的最长公共前缀长度及非公共字符串,确定待存储所述目标索引的目标节点;
将所述目标索引存储至所述目标链表中的所述目标节点中。
本实施例中,终端设备在将目标索引***目标链表中时,先基于目标链表中各个索引的最长公共前缀长度及非公共字符串,确定目标链表中各个索引对应的后缀字符串。具体的,终端设备可以预先定义一个初始长度为0的字符串变量,将该初始长度为0的字符串变量与第一个索引的非公共字符串进行组合,得到目标链表中第一个索引对应的后缀字符串。对于第一个索引的各个后续索引,终端设备可以从各个后续索引的前继索引对应的后缀字符串中提取前n个字符,得到各个后续索引的待组合字符,将每一后续索引的待组合字符与该后续索引的非公共字符串进行组合,得到每一后续索引对应的后缀字符串。其中,n为每一后续索引的最长公共前缀长度。
终端设备得到目标链表中每个索引对应的后缀字符串后,将目标索引对应的后缀字符串依次与目标链表中存储的各个索引对应的后缀字符串进行对比,当目标索引对应的后缀字符串大于目标链表中某索引对应的后缀字符串,且小于该索引的后继索引对应的后缀字符串时,终端设备将用于存储该索引的节点的后继节点确定为待存储目标索引的目标节点,将目标节点中原来存储的索引后移一个节点进行存储,将目标索引存储至该目标节点中。
需要说明的是,本申请实施例中,某索引的后继索引指与该索引相邻且按照字典顺序排列在该索引之后的索引,每一索引的后继索引仅有一个。
以上可以看出,本实施例提供的一种数据存储方法在目标链表中没有足够的存储空间存储从磁盘中获取到的目标索引时,对缓存中其他链表的存储空间进行缩减,对目标链表的存储空间进行扩充,从而能够保证将所有目标索引均存储在缓存中的目标链表中,使得在后续进行检索时能够直接从缓存中查找到目标索引,提高了数据查询效率,缩短了数据查询时间。
请参阅图5,图5是本申请实施例提供的一种终端设备的结构框图。本实施例中的终端设备可以是服务器、计算机、智能手机以及平板电脑等能够执行数据存储操作的设备。该终端设备包括的各单元用于执行图1至图4对应的实施例中的各步骤。具体请参阅图1至图4以及图1至图4所对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。参见图5,终端设备500包括:第一查找单元51、第一检测单元52、第二查找单元53、数据添加单元54及数据输出单元55。其中:
第一查找单元51用于获取搜索关键词,从缓存中查找与所述搜索关键词的首字符对应的目标链表;所述目标链表用于存储以所述搜索关键词的首字符为首字符的后缀字符串对应的索引的信息。
第一检测单元52用于检测所述目标链表中是否存在与所述搜索关键词相匹配的目标索引。
第二查找单元53用于若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则从磁盘中查找并获取与所述搜索关键词相匹配的目标索引。
数据添加单元54用于将所述目标索引添加至所述缓存中的所述目标链表中,并输出所述目标索引对应的后缀字符串。
数据输出单元55用于若所述目标链表中存在与所述搜索关键词相匹配的目标索引,则获取并输出所述目标索引对应的后缀字符串。
作为本申请一实施例,所述索引的信息包括最长公共前缀长度、源位置标识、非公共字符串、被检索次数及后继索引的地址;所述最长公共前缀长度用于描述所述索引对应的后缀字符串与其前继后缀字符串的最长公共前缀的长度,所述源位置标识用于描述所述索引对应的后缀字符串在源文件中的位置,所述非公共字符串用于描述所述索引对应的后缀字符串与其前继后缀字符串的预设长度的非公共字符串,所述被检索次数用于描述所述索引被检索到的次数,所述后继索引的地址用于描述所述索引的后继索引在所述目标链表中的地址。
第一检测单元52具体包括:索引检测单元、第一比较单元、第一确定单元、第一获取单元及第二确定单元。其中:
索引检测单元用于检测所述目标链表中的第一个索引是否为空。
第一比较单元用于若所述目标链表中的第一个索引不为空,则获取所述第一个索引的非公共字符串,将预先定义的初始长度为0的字符串变量与所述第一个索引的非公共字符串进行组合得到所述第一个索引对应的后缀字符串,将所述第一个索引对应的后缀字符串与所述搜索关键词进行对比。
第一确定单元用于若所述第一个索引对应的后缀字符串与所述搜索关键词相等,则将所述第一个索引确定为与所述搜索关键词相匹配的目标索引。
第一获取单元用于获取所述第一个索引的各个后续索引的最长公共前缀长度。
第二确定单元用于若所述第一个索引的后续索引的最长公共前缀长度大于或等于所述搜索关键词的长度,则将所述第一个索引的后续索引确定为与所述搜索关键词相匹配的目标索引。
作为本申请一实施例,第一检测单元52还包括:字符串组合单元及第三确定单元。其中:
字符串组合单元用于若所述第一个索引对应的后缀字符串小于所述搜索关键词,则获取所述第一个索引的各个后续索引的最长公共前缀长度及非公共字符串,从各个所述后续索引的前继索引对应的后缀字符串中提取前n个字符,得到各个所述后续索引的待组合字符,将每一所述后续索引的所述待组合字符与该后续索引的非公共字符串进行组合,得到每一所述后继索引对应的后缀字符串;其中,n为所述后继索引的最长公共前缀长度。
第三确定单元用于依次将所述第一个索引的各个所述后继索引对应的后缀字符串与所述搜索关键词进行大小对比,基于对比结果确定所述第一个索引的后继索引是否为与所述搜索关键词相匹配的目标索引。
作为本申请一实施例,第二查找单元53具体包括:索引查找单元、后缀字符串查找单元及目标索引确定单元。其中:
索引查找单元用于若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则基于二分法从磁盘中存储的索引文件中确定待查找的索引,并获取所述待查找的索引的源位置标识。
后缀字符串查找单元用于基于所述待查找的索引的源位置标识,从所述磁盘中存储的源文件中获取所述待查找的索引对应的后缀字符串。
目标索引确定单元用于若所述待查找的索引对应的后缀字符串中包含所述搜索关键词,则将所述待查找的索引确定为与所述搜索关键词相匹配的目标索引。
作为本申请一实施例,数据添加单元54具体包括:剩余存储量确定单元、索引添加单元及存储空间调整单元。其中:
剩余存储量确定单元用于确定所述目标链表的剩余存储量。
索引添加单元用于若所述目标索引的总数据量小于或等于所述目标链表的剩余存储量,则将所述目标索引添加至所述缓存中的所述目标链表中。
存储空间调整单元用于若所述目标索引的总数据量大于所述目标链表的剩余存储量,则对所述缓存中除所述目标链表之外的链表的存储空间进行缩减,对所述目标链表的存储空间进行扩充,直至所述目标链表的剩余存储量大于或等于所述目标索引的总数据量,将所述目标索引添加至扩充后的所述目标链表中。
作为本申请另一实施例,数据添加单元54还包括:第四确定单元及缩减扩充单元。其中:
第四确定单元用于若所述目标索引的总数据量大于所述目标链表的剩余存储量,则确定已存数据量小于可存数据量的一半的待缩减链表。
缩减扩充单元用于将所述待缩减链表的可存数据量缩减一半,并基于所述待缩减链表所缩减的数据量对所述目标链表的可存数据量进行扩充,直至所述目标链表的剩余存储量大于或等于所述目标索引的总数据量,将所述目标索引添加至扩充后的所述目标链表中。
作为本申请再一实施例,数据添加单元54还包括:第五确定单元及索引添加单元。其中:
第五确定单元用于基于所述目标索引、所述目标链表中各个索引的最长公共前缀长度及非公共字符串,确定待存储所述目标索引的目标节点。
索引添加单元用于将所述目标索引存储至所述目标链表中的所述目标节点中。
以上可以看出,本申请实施例提供的一种终端设备在获取到搜索关键词后,先从缓存中查找与搜索关键词相匹配的索引;当缓存中存在与搜索关键词相匹配的目标索引时,直接从缓存中获取并输出与目标索引对应的后缀字符串,由于该种情况无需从磁盘中查找数据,从而缩短了数据查询时间,提高了数据查询效率;当缓存中不存在与搜索关键词相匹配的目标索引时,才从磁盘中获取与搜索关键词相匹配的目标索引,并将目标索引添加至缓存中,以便后续可以从缓存中直接查找到该目标索引,该种情况减少了访问磁盘的次数,同样也缩短了数据查询时间,提高了数据查询效率。
图6是本申请另一实施例提供的一种终端设备的示意图。如图6所示,该实施例的终端设备6包括:处理器60、存储器61以及存储在所述存储器61中并可在所述处理器60上运行的计算机程序62,例如任务请求的响应程序。所述处理器60执行所述计算机程序62时实现上述各个数据存储方法实施例中的步骤,例如图1所示的S1至S5。或者,所述处理器60执行所述计算机程序62时实现上述各装置实施例中各单元的功能,例如图5所示模块51至55功能。
示例性的,所述计算机程序62可以被分割成一个或多个单元,所述一个或者多个单元被存储在所述存储器61中,并由所述处理器60执行,以完成本申请。所述一个或多个单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序62在所述终端设备6中的执行过程。例如,所述计算机程序62可以被分割成第一查找单元、第一检测单元、第二查找单元、数据添加单元及数据输出单元,各单元具体功能如上所述。
所述终端设备6可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器60、存储器61。本领域技术人员可以理解,图6仅仅是终端设备6的示例,并不构成对终端设备6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器60可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器61可以是所述终端设备6的内部存储单元,例如终端设备6的磁盘或内存。所述存储器61也可以是所述终端设备6的外部存储设备,例如所述终端设备6上配备的插接式磁盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器61还可以既包括所述终端设备6的内部存储单元也包括外部存储设备。所述存储器61用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器61还可以用于暂时地存储已经输出或者将要输出的数据。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (10)

1.一种数据存储方法,其特征在于,包括:
获取搜索关键词,从缓存中查找与所述搜索关键词的首字符对应的目标链表;所述目标链表用于存储以所述搜索关键词的首字符为首字符的后缀字符串对应的索引的信息;
检测所述目标链表中是否存在与所述搜索关键词相匹配的目标索引;
若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则从磁盘中查找并获取与所述搜索关键词相匹配的目标索引;
将所述目标索引添加至所述缓存中的所述目标链表中,并输出所述目标索引对应的后缀字符串;
若所述目标链表中存在与所述搜索关键词相匹配的目标索引,则获取并输出所述目标索引对应的后缀字符串。
2.根据权利要求1所述的数据存储方法,其特征在于,所述索引的信息包括最长公共前缀长度、源位置标识、非公共字符串、被检索次数及后继索引的地址;所述最长公共前缀长度用于描述所述索引对应的后缀字符串与其前继后缀字符串的最长公共前缀的长度,所述源位置标识用于描述所述索引对应的后缀字符串在源文件中的位置,所述非公共字符串用于描述所述索引对应的后缀字符串与其前继后缀字符串的预设长度的非公共字符串,所述被检索次数用于描述所述索引被检索到的次数,所述后继索引的地址用于描述所述索引的后继索引在所述目标链表中的地址;
所述检测检测所述目标链表中是否存在与所述搜索关键词相匹配的目标索引,包括:
检测所述目标链表中的第一个索引是否为空;
若所述目标链表中的第一个索引不为空,则获取所述第一个索引的非公共字符串,将预先定义的初始长度为0的字符串变量与所述第一个索引的非公共字符串进行组合得到所述第一个索引对应的后缀字符串,将所述第一个索引对应的后缀字符串与所述搜索关键词进行对比;
若所述第一个索引对应的后缀字符串与所述搜索关键词相等,则将所述第一个索引确定为与所述搜索关键词相匹配的目标索引;
获取所述第一个索引的各个后续索引的最长公共前缀长度;
若所述第一个索引的后续索引的最长公共前缀长度大于或等于所述搜索关键词的长度,则将所述第一个索引的后续索引确定为与所述搜索关键词相匹配的目标索引。
3.根据权利要求2所述的数据存储方法,其特征在于,所述将所述第一个索引对应的后缀字符串与所述搜索关键词进行对比之后,还包括:
若所述第一个索引对应的后缀字符串小于所述搜索关键词,则获取所述第一个索引的各个后续索引的最长公共前缀长度及非公共字符串,从各个所述后续索引的前继索引对应的后缀字符串中提取前n个字符,得到各个所述后续索引的待组合字符,将每一所述后续索引的所述待组合字符与该后续索引的非公共字符串进行组合,得到每一所述后继索引对应的后缀字符串;其中,n为所述后继索引的最长公共前缀长度;
依次将所述第一个索引的各个所述后继索引对应的后缀字符串与所述搜索关键词进行大小对比,基于对比结果确定所述第一个索引的后继索引是否为与所述搜索关键词相匹配的目标索引。
4.根据权利要求1所述的数据存储方法,其特征在于,所述若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则从磁盘中查找与所述搜索关键词相匹配的目标索引,包括:
若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则基于二分法从磁盘中存储的索引文件中确定待查找的索引,并获取所述待查找的索引的源位置标识;
基于所述待查找的索引的源位置标识,从所述磁盘中存储的源文件中获取所述待查找的索引对应的后缀字符串;
若所述待查找的索引对应的后缀字符串中包含所述搜索关键词,则将所述待查找的索引确定为与所述搜索关键词相匹配的目标索引。
5.根据权利要求1所述的数据存储方法,其特征在于,所述将所述目标索引添加至所述缓存中的所述目标链表中,包括:
确定所述目标链表的剩余存储量;
若所述目标索引的总数据量小于或等于所述目标链表的剩余存储量,则将所述目标索引添加至所述缓存中的所述目标链表中;
若所述目标索引的总数据量大于所述目标链表的剩余存储量,则对所述缓存中除所述目标链表之外的链表的存储空间进行缩减,对所述目标链表的存储空间进行扩充,直至所述目标链表的剩余存储量大于或等于所述目标索引的总数据量,将所述目标索引添加至扩充后的所述目标链表中。
6.根据权利要求5所述的数据存储方法,其特征在于,所述对所述缓存中除所述目标链表之外的链表的存储空间进行缩减,对所述目标链表的存储空间进行扩充,包括:
从除所述目标链表之外的其余链表中确定已存数据量小于可存数据量的一半的待缩减链表;
将所述待缩减链表的存储空间缩减一半,并基于所述待缩减链表所缩减的存储空间对所述目标链表的存储空间进行扩充,直至所述目标链表的剩余存储量大于或等于所述目标索引的总数据量。
7.根据权利要求2-6任一项所述的数据存储方法,其特征在于,所述将所述目标索引添加至所述缓存中的所述目标链表中,包括:
基于所述目标索引、所述目标链表中各个索引的最长公共前缀长度及非公共字符串,确定待存储所述目标索引的目标节点;
将所述目标索引存储至所述目标链表中的所述目标节点中。
8.一种终端设备,其特征在于,包括:
第一查找单元,用于获取搜索关键词,从缓存中查找与所述搜索关键词的首字符对应的目标链表;所述目标链表用于存储以所述搜索关键词的首字符为首字符的后缀字符串对应的索引的信息;
第一检测单元,用于检测所述目标链表中是否存在与所述搜索关键词相匹配的目标索引;
第二查找单元,用于若所述目标链表中不存在与所述搜索关键词相匹配的目标索引,则从磁盘中查找并获取与所述搜索关键词相匹配的目标索引;
数据添加单元,用于将所述目标索引添加至所述缓存中的所述目标链表中,并输出所述目标索引对应的后缀字符串;
数据输出单元,用于若所述目标链表中存在与所述搜索关键词相匹配的目标索引,则获取并输出所述目标索引对应的后缀字符串。
9.一种终端设备,其特征在于,所述终端设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时如权利要求1至7任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述方法的步骤。
CN201910749968.7A 2019-08-14 2019-08-14 一种数据查询方法、终端设备及计算机可读存储介质 Active CN110597855B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910749968.7A CN110597855B (zh) 2019-08-14 2019-08-14 一种数据查询方法、终端设备及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910749968.7A CN110597855B (zh) 2019-08-14 2019-08-14 一种数据查询方法、终端设备及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN110597855A true CN110597855A (zh) 2019-12-20
CN110597855B CN110597855B (zh) 2022-03-29

Family

ID=68854411

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910749968.7A Active CN110597855B (zh) 2019-08-14 2019-08-14 一种数据查询方法、终端设备及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN110597855B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111444413A (zh) * 2020-04-08 2020-07-24 作业不凡(北京)教育科技有限公司 一种数据查询方法、装置和计算设备
CN112069366A (zh) * 2020-08-28 2020-12-11 喜大(上海)网络科技有限公司 召回确定方法、装置、设备及存储介质
CN112316416A (zh) * 2020-11-13 2021-02-05 网易(杭州)网络有限公司 数据搜索方法、装置、计算机设备及存储介质
CN112527210A (zh) * 2020-12-22 2021-03-19 南京中兴力维软件有限公司 全量数据的存储方法、装置以及计算机可读存储介质
CN112565089A (zh) * 2020-11-30 2021-03-26 锐捷网络股份有限公司 一种路由信息的处理方法及装置
CN112765421A (zh) * 2021-01-13 2021-05-07 中山大学 一种数据检索方法及装置、终端设备
CN112765938A (zh) * 2021-01-13 2021-05-07 中山大学 构造后缀数组的方法、终端设备及计算机可读存储介质
CN113792616A (zh) * 2021-08-26 2021-12-14 南方电网深圳数字电网研究院有限公司 一种基于边缘计算的远程读表***及其工作方法
CN114741388A (zh) * 2022-03-29 2022-07-12 中山大学 一种集成电路版图数据索引的新型构建方法
CN115982311A (zh) * 2023-03-21 2023-04-18 广东海洋大学 一种链表的生成方法、装置、终端设备及存储介质
CN117785889A (zh) * 2024-02-22 2024-03-29 支付宝(杭州)信息技术有限公司 一种针对图数据库的索引管理方法及相关设备

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101030897A (zh) * 2007-02-07 2007-09-05 华为技术有限公司 一种入侵检测中模式匹配的方法和装置
CN102122285A (zh) * 2010-01-11 2011-07-13 卓望数码技术(深圳)有限公司 一种数据缓存***和数据查询方法
US20120117076A1 (en) * 2010-11-09 2012-05-10 Tibco Software Inc. Suffix array candidate selection and index data structure
US20120233185A1 (en) * 2011-03-08 2012-09-13 Najjar Walid A String matching in hardware using the fm-index
CN105335481A (zh) * 2015-10-14 2016-02-17 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种大规模字符串文本的后缀索引构造方法及装置
CN106953806A (zh) * 2017-03-27 2017-07-14 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种基于后缀索引匹配ip地址的方法及***
CN107154899A (zh) * 2017-03-23 2017-09-12 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种用后缀索引查找ip路由的***
CN107291858A (zh) * 2017-06-09 2017-10-24 成都索贝数码科技股份有限公司 一种基于字符串后缀的数据索引方法
CN108846016A (zh) * 2018-05-05 2018-11-20 复旦大学 一种面向中文分词的搜索算法
CN108920483A (zh) * 2018-04-28 2018-11-30 南京搜文信息技术有限公司 基于后缀数组的字符串快速匹配方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101030897A (zh) * 2007-02-07 2007-09-05 华为技术有限公司 一种入侵检测中模式匹配的方法和装置
CN102122285A (zh) * 2010-01-11 2011-07-13 卓望数码技术(深圳)有限公司 一种数据缓存***和数据查询方法
US20120117076A1 (en) * 2010-11-09 2012-05-10 Tibco Software Inc. Suffix array candidate selection and index data structure
US20120233185A1 (en) * 2011-03-08 2012-09-13 Najjar Walid A String matching in hardware using the fm-index
CN105335481A (zh) * 2015-10-14 2016-02-17 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种大规模字符串文本的后缀索引构造方法及装置
CN107154899A (zh) * 2017-03-23 2017-09-12 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种用后缀索引查找ip路由的***
CN106953806A (zh) * 2017-03-27 2017-07-14 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种基于后缀索引匹配ip地址的方法及***
CN107291858A (zh) * 2017-06-09 2017-10-24 成都索贝数码科技股份有限公司 一种基于字符串后缀的数据索引方法
CN108920483A (zh) * 2018-04-28 2018-11-30 南京搜文信息技术有限公司 基于后缀数组的字符串快速匹配方法
CN108846016A (zh) * 2018-05-05 2018-11-20 复旦大学 一种面向中文分词的搜索算法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
YA BÉZ等: "Indexing Structured Documents with Suffix Arrays", 《IEEE》 *
刘畅等: "基于后缀数组改进的全文索引结构研究", 《吉林大学学报》 *

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111444413A (zh) * 2020-04-08 2020-07-24 作业不凡(北京)教育科技有限公司 一种数据查询方法、装置和计算设备
CN111444413B (zh) * 2020-04-08 2023-05-12 作业不凡(北京)教育科技有限公司 一种数据查询方法、装置和计算设备
CN112069366A (zh) * 2020-08-28 2020-12-11 喜大(上海)网络科技有限公司 召回确定方法、装置、设备及存储介质
CN112069366B (zh) * 2020-08-28 2024-02-09 喜大(上海)网络科技有限公司 召回确定方法、装置、设备及存储介质
CN112316416A (zh) * 2020-11-13 2021-02-05 网易(杭州)网络有限公司 数据搜索方法、装置、计算机设备及存储介质
CN112565089B (zh) * 2020-11-30 2022-06-21 锐捷网络股份有限公司 一种路由信息的处理方法及装置
CN112565089A (zh) * 2020-11-30 2021-03-26 锐捷网络股份有限公司 一种路由信息的处理方法及装置
CN112527210A (zh) * 2020-12-22 2021-03-19 南京中兴力维软件有限公司 全量数据的存储方法、装置以及计算机可读存储介质
CN112765938A (zh) * 2021-01-13 2021-05-07 中山大学 构造后缀数组的方法、终端设备及计算机可读存储介质
CN112765421A (zh) * 2021-01-13 2021-05-07 中山大学 一种数据检索方法及装置、终端设备
CN112765421B (zh) * 2021-01-13 2024-01-02 中山大学 一种数据检索方法及装置、终端设备
CN112765938B (zh) * 2021-01-13 2024-02-09 中山大学 构造后缀数组的方法、终端设备及计算机可读存储介质
CN113792616A (zh) * 2021-08-26 2021-12-14 南方电网深圳数字电网研究院有限公司 一种基于边缘计算的远程读表***及其工作方法
CN114741388A (zh) * 2022-03-29 2022-07-12 中山大学 一种集成电路版图数据索引的新型构建方法
CN114741388B (zh) * 2022-03-29 2024-02-23 中山大学 一种集成电路版图数据索引的新型构建方法
CN115982311A (zh) * 2023-03-21 2023-04-18 广东海洋大学 一种链表的生成方法、装置、终端设备及存储介质
CN115982311B (zh) * 2023-03-21 2023-06-20 广东海洋大学 一种链表的生成方法、装置、终端设备及存储介质
CN117785889A (zh) * 2024-02-22 2024-03-29 支付宝(杭州)信息技术有限公司 一种针对图数据库的索引管理方法及相关设备

Also Published As

Publication number Publication date
CN110597855B (zh) 2022-03-29

Similar Documents

Publication Publication Date Title
CN110597855B (zh) 一种数据查询方法、终端设备及计算机可读存储介质
US8977626B2 (en) Indexing and searching a data collection
US20100067867A1 (en) System and method for searching video scenes
CN108363729B (zh) 一种字符串比较方法、装置、终端设备及存储介质
WO2019085474A1 (zh) 计算引擎实现方法、电子装置及存储介质
CN111459978A (zh) 查询方法、装置、计算机设备和存储介质
US10649997B2 (en) Method, system and computer program product for performing numeric searches related to biometric information, for finding a matching biometric identifier in a biometric database
US9298757B1 (en) Determining similarity of linguistic objects
US10565205B2 (en) Incrementally building hash collision tables
EP3926484B1 (en) Improved fuzzy search using field-level deletion neighborhoods
US11989185B2 (en) In-memory efficient multistep search
US8914377B2 (en) Methods for prefix indexing
CN110555165B (zh) 信息识别方法、装置、计算机设备和存储介质
RU2595523C2 (ru) Способ обработки изображения, способ создания индекса изображения, способ обнаружения соответствия изображению из хранилища изображений и сервер (варианты)
CN109656947B (zh) 数据查询方法、装置、计算机设备和存储介质
CN111858581A (zh) 一种分页查询的方法、装置、存储介质和电子设备
CN116303968A (zh) 基于技术关键词抽取的语义搜索方法、装置、设备及介质
CN113946365A (zh) 页面识别方法、装置、计算机设备和存储介质
CN110471901B (zh) 数据导入方法及终端设备
US9864765B2 (en) Entry insertion apparatus, method, and program
CN112765938B (zh) 构造后缀数组的方法、终端设备及计算机可读存储介质
CN111666295B (zh) 数据提取方法、终端设备及计算机可读存储介质
KR102075709B1 (ko) 컨텐츠 검색 방법 및 장치
CN114238604A (zh) 一种芯片寄存器检索方法、装置和电子设备
CN114510640A (zh) 一种搜索记录排序方法、装置及终端设备

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