数据存储与检索方法、装置、计算机设备及存储介质与流程

文档序号:24352487发布日期:2021-03-19 12:38阅读:67来源:国知局
数据存储与检索方法、装置、计算机设备及存储介质与流程

本发明涉及数据处理技术领域,特别涉及一种数据存储与检索方法、装置、计算机设备及存储介质。



背景技术:

当今社会已经不折不扣步入大数据时代,越来越多的数据存储于我们的计算机设备中。计算机的内存也由以前的几兆逐步发展到现在的数十gb,计算机硬盘也由几百兆发展到现在的几百tb。随着存储数据量的几何级增长,我们需要不断增加存储设备容量来存储日益增长的数据,同时也需要新的方法来提高检索存量数据的速度。

现有的方法是将数据直接用通用的编码(例如,utf8,unicode,gbk等)编码后存储于设备中。我们知道对于一个汉字utf8编码下占2个字节,gbk编码下占3个字节。意思就是一段汉字,编码后所占的存储空间至少是汉字数*2字节,可见存储空间依然很大,不利于减小存储的占用空间,不利于提高检索效率。



技术实现要素:

本发明实施例提供了一种数据存储与检索方法,以解决现有技术中数据存储与检索存在的存储占用空间大、检索效率低的技术问题。该方法包括:

对原始数据进行哈夫曼编码;

存储编码后的数据;

接收检索关键字,对检索关键字进行哈夫曼编码;

利用编码后的检索关键字在所述编码后的数据中进行检索,得到编码后的检索数据;

对编码后的检索数据进行解码,得到检索数据的原始数据。

本发明实施例还提供了一种数据存储与检索装置,以解决现有技术中数据存储与检索存在的存储占用空间大、检索效率低的技术问题。该装置包括:

第一编码模块,用于对原始数据进行哈夫曼编码;

存储模块,用于存储编码后的数据;

第二编码模块,用于接收检索关键字,对检索关键字进行哈夫曼编码;

检索模块,用于利用编码后的检索关键字在所述编码后的数据中进行检索,得到编码后的检索数据;

解码模块,用于对编码后的检索数据进行解码,得到检索数据的原始数据。

本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的数据存储与检索方法,以解决现有技术中数据存储与检索存在的存储占用空间大、检索效率低的技术问题。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的数据存储与检索方法的计算机程序,以解决现有技术中数据存储与检索存在的存储占用空间大、检索效率低的技术问题。

在本发明实施例中,提出了对原始数据进行哈夫曼编码,并存储编码后的数据,进而对检索关键字进行哈夫曼编码,利用编码后的检索关键字在所述编码后的数据中进行检索,以得到编码后的检索数据,最后,对编码后的检索数据进行解码,即可以得到检索数据的原始数据。由于是采用哈夫曼编码对原始数据进行编码,编码后每个字符所占的平均空间小于现有编码所占空间,编码后的数据所占用空间小于原始数据所占用空间,有利于缩小存储整个文本所需的总占用空间,进而有利于提高空间利用率;同时,以编码的形式进行检索,由于编码所占用空间小,实现了在一个较小的数据空间中进行检索,有利于减少检索所需的内存开销,同时有利于提高检索速度,提高检索效率。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:

图1是本发明实施例提供的一种数据存储与检索方法的流程图;

图2是本发明实施例提供的一种哈夫曼编码过程的示意图;

图3是本发明实施例提供的一种对原始数据进行哈夫曼编码的过程示意图;

图4是本发明实施例提供的一种基于编码进行检索的过程示意图;

图5是本发明实施例提供的一种基于编码进行检索的算法示意图;

图6是本发明实施例提供的一种计算机设备的结构框图;

图7是本发明实施例提供的一种数据存储与检索装置的结构框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。

在本发明实施例中,提供了一种数据存储与检索方法,如图1所示,该方法包括:

步骤102:对原始数据进行哈夫曼编码;

步骤104:存储编码后的数据;

步骤106:接收检索关键字,对检索关键字进行哈夫曼编码;

步骤108:利用编码后的检索关键字在所述编码后的数据中进行检索,得到编码后的检索数据;

步骤110:对编码后的检索数据进行解码,得到检索数据的原始数据。

由图1所示的流程可知,在本发明实施例中,提出了对原始数据进行哈夫曼编码,并存储编码后的数据,进而对检索关键字进行哈夫曼编码,利用编码后的检索关键字在所述编码后的数据中进行检索,以得到编码后的检索数据,最后,对编码后的检索数据进行解码,即可以得到检索数据的原始数据。由于是采用哈夫曼编码对原始数据进行编码,编码后每个字符所占的平均空间小于现有编码所占空间,编码后的数据所占用空间小于原始数据所占用空间,有利于缩小存储整个文本所需的总占用空间,进而有利于提高空间利用率;同时,以编码的形式进行检索,由于编码所占用空间小,实现了在一个较小的数据空间中进行检索,有利于减少检索所需的内存开销,同时有利于提高检索速度,提高检索效率。

具体实施时,huffmancoding(哈夫曼编码),是huffman于1952年提出的一种编码方法。该方法完全依据字符出现概率来构造异字头的平均长度最短的码字。意思就是将频繁出现的字符用短的编码表示,不太频繁出现的字符用长编码表示,以此降低每个字符的平均编码长度,最终降低整个文本的编码总长度。如图2所示,例如:“我爱我的祖国我的祖国是中国”这句话中包含13个汉字。假设我们用常用的utf8编码方式进行存储,那么一个汉字占两个字节(1个字节占8bit),总共需要占26个字节(208bit)。我们将这句话通过哈夫曼编码,编码为01000001100101110110010111000100111,可见,正文只需要35bit,数据字典(即哈夫曼编码过程中字符和编码的对应关系)需要133bit,总共需要168bit。与utf8编码方式相比,哈夫曼编码的压缩率是87%。即基于编码检索的过程中,只需要在35个bit空间中进行顺序扫描即可。

具体的,bit是计算机中表示信息的最小单位,是二进制数的一位,一般用0或1表示。本申请中的哈夫曼编码每一位都用0或1表示,即可采用bit来表示。

字节,一个字节包含8个bit。一个汉字如果用utf8编码表示,占2个字节,即16个bit。

数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间,提高数据的传输、存储和处理效率。

压缩比率是指压缩后所占空间除以未压缩所占空间。如本例中,压缩比率=[35(压缩后正文所占空间)+133(数据字典所占空间)]/208(原始数据所占空间)=87%。

具体实施时,在本实施例中,对原始数据进行哈夫曼编码并存储的过程如图3所示,可以通过编/解码引擎对原始数据进行哈夫曼编码,得到数据字典和原始数据编码后的数据,进而通过查询/存储引擎将数据字典和编码后的数据存储在存储设备中。

具体的,原始数据即用户所见即所得的数据,是用户可以理解的汉字、外文、标点符号等数据。是未经过编码的数据。比如一段文字:我爱我的祖国我的祖国是中国。

具体的,编/解码引擎可以是一个服务、方法、函数或者是一个事件。通过这个服务,计算机可以将原始数据编码成为哈夫曼编码,并用哈夫曼编码表示所有的数据,编码后的数据所占用空间小于原始数据所占用空间。比如:我爱我的祖国我的祖国是中国。通过哈夫曼编码后表示为:01000001100101110110010111000100111。原始数据占用26个字节,208个bit,而编码后的数据我们用1个bit表示0和1,总共只占35个bit。正文部分大大缩减了占用空间。同时编码的结果还会生成一张字典表(即上述数据字典),即每个字符应该用什么编码表示的对照表(如图2中步骤3所示的表,表示出每个字符对应的编码)。当该引擎作为一个事件时,如果文章内容发生变化,会触发该事件,重新编码,重新生成数据字典。编码是一个耗时的过程,触发如果频繁发生,将对计算机造成很大负担,因此建议针对全文触发该引擎时是采用定时策略。或者将该发明用于存量不经常发生改变,但是检索频繁的数据。编码对应着解码,该引擎还需要有解码的功能,就是将哈夫曼编码根据数据字典解码成原始数据。

具体的,数据字典就是一张原始数据字符和哈夫曼编码的对照表,如图2中步骤3所示的“每个字符对应的编码”表。例如,“我”对应的哈夫曼编码是“01”,“爱”对应的哈夫曼编码是“0000”。数据字典可以采用hash存储,key为编码,value为原始数据。有了数据字典,我们就可以将原始数据的字符替换成编码表示。如:我爱我的祖国我的祖国是中国。通过编码后表示为:01000001100101110110010111000100111。数据字典还要用来解码,是编码的逆过程。我们在计算压缩比率的时候,还必须考虑数据字典所占用的空间,比如该例子中,数据字典占用的空间是133个bit。随着文本量的增加,数据字典大小会逐渐稳定,压缩比率会进一步缩小。

具体实施时,数据存储是指将数据存储于计算内存或者磁盘上。在本实施例中,上述原始数据可以是加载入内存的数据,存储设备存储压缩后的数据所占用内存开销较小。存储设备可以是内存、磁盘、光盘等。

具体的,查询/存储引擎是一个功能和机制的集合,一方面保证数据可以正常写入存储设备,另一方面保证数据可以高效地从存储设备检索。有很多现成的优秀的存储引擎供我们选择,针对非结构化数据,可以采用lucene实现。针对结构化数据可以采用innodb,bdb。本申请存储的编码是以bit类型存储,检索关键字也是以哈夫曼编码表示,所以在存储和查询的时候可以选择针对bit的操作。比如mysql数据库为我们提供了bit类型的查询和插入功能。

具体实施时,为了进一步缩减存储空间,提高检索速率,在本实施例中,提出了还可以对所述原始数据进行分词,对分词后的原始数据进行哈夫曼编码。

具体实施时,基于编码进行关键词检索的过程如图4所示,基于编码原始数据的数据字典,对接收的检索关键词进行哈夫曼编码,得到编码后的检索关键词,通过查询/存储引擎在存储设备中使用检索关键词的编码进行检索,得到编码后的检索数据,进而基于数据字典对编码后的检索数据进行解码,得到检索数据的原始数据。

具体实施时,在本实施例中,为了提高检索效率和检索准确率,在检索时,以预设扫描长度将检索关键字的编码在所述原始数据对应的编码中进行匹配,得到检索数据对应的编码,其中,所述预设扫描长度为所述检索关键字哈夫曼编码后的编码长度,对所述原始数据进行哈夫曼编码后得到所述原始数据对应的编码。

具体实施时,如果是针对全文编码进行检索,为了进一步提高检索效率和检索准确率,在本实施例中,在数据字典中从全文编码开始位以预设扫描长度进行扫描,当检索关键字的编码与所述数据字典中的编码匹配(即检索关键字的编码在数据字典中存在)且所述数据字典中匹配的编码对应的字符与检索关键字匹配,则所述数据字典中匹配的编码为检索数据对应的编码,将扫描位置往后移动到未扫描位置的第一位继续进行扫描;当检索关键字的编码与所述数据字典中的编码不匹配和/或所述数据字典中匹配的编码对应的字符与检索关键字不匹配,将扫描位置往后移动一位继续进行扫描;直到扫描至全文编码的最后一位,其中,所述数据字典包括所述原始数据的字符与编码的对应关系,所述预设扫描长度为所述检索关键字哈夫曼编码后的编码长度。

具体的,数据检索是指将内存或磁盘数据根据用户需求提取出来,并按用户要求展示给用户。例如,要检索“国”(即检索关键词),其编码为“11”,从头到尾顺序扫描所有bit位,此处使用位移运算,预设扫描长度为关键字编码长度(本例为2),如果bit段(多个bit位的组合,即关键字编码)在数据字典(数据字典采用hash存储便于快速检索)中存在,并与“11”匹配,数据字典中编码“11”对应的字符也为关键词“国”,那么我们就找到匹配的bit段,也就检索到“国”字。注意,为了加速检索效率,每一次匹配到数据字典中存在bit段,我们将扫描位置往后移动到未扫描位置的第一位以整体关键词的编码继续进行扫描;如果检索关键字的编码在数据字典中不存在和/或所述数据字典中匹配的编码对应的字符与检索关键字不匹配,则将扫描位置往后移动一位继续进行扫描;直到扫描至全文编码的最后一位。

具体的,基于编码在数据字典中扫描检索的算法如图5所示,此算法复杂度小于o(n)。图5中pre:扫描的bit段起始位,aft:扫描的bit位末位,bit[pre-aft]:扫描pre到aft的bit段,l:检索关键字编码长度,l:全文编码长度。

具体实施时,检索到编码后的检索数据后,通过网络传输,可以减小对网络带宽的要求,减轻网络负担。查询到的编码后的检索数据通过解码,就可以得到无损的原始数据。此外,通过压缩编码后存储的数据具有保密性,如果一旦数据泄露,在没有数据字典的情况下相当于是密文,是无法知道原始数据。

在本实施例中,提供了一种计算机设备,如图6所示,包括存储器602、处理器604及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的数据存储与检索方法。

具体的,该计算机设备可以是计算机终端、服务器或者类似的运算装置。

在本实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的数据存储与检索方法的计算机程序。

具体的,计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读存储介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

基于同一发明构思,本发明实施例中还提供了一种数据存储与检索装置,如下面的实施例所述。由于数据存储与检索装置解决问题的原理与数据存储与检索方法相似,因此数据存储与检索装置的实施可以参见数据存储与检索方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图7是本发明实施例的数据存储与检索装置的一种结构框图,如图7所示,该装置包括:

第一编码模块702,用于对原始数据进行哈夫曼编码;

存储模块704,用于存储编码后的数据;

第二编码模块706,用于接收检索关键字,对检索关键字进行哈夫曼编码;

检索模块708,用于利用编码后的检索关键字在所述编码后的数据中进行检索,得到编码后的检索数据;

解码模块710,用于对编码后的检索数据进行解码,得到检索数据的原始数据。

在一个实施例中,所述第一编码模块,还用于对所述原始数据进行分词,对分词后的原始数据进行哈夫曼编码。

在一个实施例中,所述检索模块,用于在检索时,以预设扫描长度将检索关键字的编码在所述原始数据对应的编码中进行匹配,得到检索数据对应的编码,其中,所述预设扫描长度为所述检索关键字哈夫曼编码后的编码长度,对所述原始数据进行哈夫曼编码后得到所述原始数据对应的编码。

在一个实施例中,所述检索模块,还用于在数据字典中从全文编码开始位以预设扫描长度进行扫描,当检索关键字的编码与所述数据字典中的编码匹配且所述数据字典中匹配的编码对应的字符与检索关键字匹配,则所述数据字典中匹配的编码为检索数据对应的编码,将扫描位置往后移动到未扫描位置的第一位继续进行扫描;当检索关键字的编码与所述数据字典中的编码不匹配和/或所述数据字典中匹配的编码对应的字符与检索关键字不匹配,将扫描位置往后移动一位继续进行扫描;直到扫描至全文编码的最后一位,其中,所述数据字典包括所述原始数据的字符与编码的对应关系,所述预设扫描长度为所述检索关键字哈夫曼编码后的编码长度。

本发明实施例实现了如下技术效果:提出了对原始数据进行哈夫曼编码,并存储编码后的数据,进而对检索关键字进行哈夫曼编码,利用编码后的检索关键字在所述编码后的数据中进行检索,以得到编码后的检索数据,最后,对编码后的检索数据进行解码,即可以得到检索数据的原始数据。由于是采用哈夫曼编码对原始数据进行编码,编码后每个字符所占的平均空间小于现有编码所占空间,编码后的数据所占用空间小于原始数据所占用空间,有利于缩小存储整个文本所需的总占用空间,进而有利于提高空间利用率;同时,以编码的形式进行检索,由于编码所占用空间小,实现了在一个较小的数据空间中进行检索,有利于减少检索所需的内存开销,同时有利于提高检索速度,提高检索效率。

显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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