CN117526963A - 数据压缩方法、装置、计算机设备及可读存储介质 - Google Patents
数据压缩方法、装置、计算机设备及可读存储介质 Download PDFInfo
- Publication number
- CN117526963A CN117526963A CN202311591674.9A CN202311591674A CN117526963A CN 117526963 A CN117526963 A CN 117526963A CN 202311591674 A CN202311591674 A CN 202311591674A CN 117526963 A CN117526963 A CN 117526963A
- Authority
- CN
- China
- Prior art keywords
- data
- byte
- hash value
- writing
- matched
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 76
- 238000013144 data compression Methods 0.000 title claims abstract description 48
- 238000004590 computer program Methods 0.000 claims description 14
- 230000004044 response Effects 0.000 claims description 8
- 238000004422 calculation algorithm Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 14
- 238000003491 array Methods 0.000 description 10
- 239000011159 matrix material Substances 0.000 description 9
- 238000007906 compression Methods 0.000 description 8
- 230000006835 compression Effects 0.000 description 7
- 238000013500 data storage Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开一种用于数据压缩的数据匹配方法、装置、设备及存储介质,方法包括:获取待压缩数据,并对待压缩数据中的字节组进行散列处理,得到第一哈希值和第二哈希值;以写入字节组的第一哈希值作为写地址,将第二哈希值写入存储单元中;以待匹配字节的第一哈希值作为读地址,从存储单元读取得到目标数组;若目标数组中的哈希值与待匹配字节组的第二哈希值相同,则将待匹配字节确定为匹配点,以基于匹配点得到压缩数据。本申请通过对字节的批量写入以及读取操作,可以利用硬件处理的一个时钟周期完成对多组数据的并行匹配,能够快速完成对数据中重复字节部分的匹配,从而进一步提高了后续的数据压缩效率。
Description
技术领域
本申请涉及数据存储技术领域,具体涉及一种数据压缩方法、装置、计算机设备及可读存储介质。
背景技术
由于在数据中经常会存在一定的重复部分,对该部分进行重新编码可达到压缩的效果。例如,以常见的“LZ77”算法(一种基于字典的、“滑动窗”的无损压缩算法)为例,通过利用一个三元数组来描述数据中重复出现部分的特征,例如重复部分的内容、重复部分之间的距离等等,就可以有效实现对数据的压缩。而其中,如何快速对数据中重复出现的部分进行快速匹配会先显著影响到数据的压缩效率。
然而,目前常见的LZ77算法通常是通过滑动窗口式的方式实现对数据的处理,但本质只是进行了指针的移位操作,实际的操作是全串行的,在数据量较大时,这种串行的处理方式往往会导致数据的压缩效率较低,从而影响到用户的体验。
发明内容
本申请实施例提供一种数据压缩方法、装置、计算机设备及可读存储介质,能够快速完成对数据中重复字节的匹配,从而有效提高了后续的数据压缩效率。
一方面,本申请实施例提供一种数据压缩方法,包括:
获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值;所述哈希值至少包括第一哈希值以及第二哈希值;
响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中;
响应于一时钟周期的读操作,以所述时钟周期内每个待匹配字节组的第一哈希值作为读地址,同时从所述哈希表中与所述读地址对应的存储单元读取得到对应的目标数组;
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节在所述待压缩数据中的匹配点;
根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据。
作为本申请的另一可行实施例,所述响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中,包括:
响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的偏移量和第二哈希值写入哈希表中与所述写地址对应的存储单元中;
所述若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点,包括:
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则基于所述目标数组中的偏移量确定所述待匹配字节在所述待压缩数据中的匹配点。
作为本申请的另一可行实施例,所述对所述待压缩数据中的字节组进行散列处理,得到所述字节组的第一哈希值以及第二哈希值,包括:
针对所述压缩数据中的每一字节组,对所述字节组进行分割,得到第一比特位和第二比特位;
将所述第二比特位确定为第二哈希值;以及
将所述第二比特位的散列结果与所述第一比特位合并,得到第一哈希值。
作为本申请的另一可行实施例,所述对所述待压缩数据中的字节组进行散列处理,得到所述字节组的至少一哈希值,包括:
针对所述待压缩数据中的每一字节,对包含当前字节的字节组进行散列处理,得到所述字节组的至少一哈希值;所述字节组至少还包括所述待压缩数据中所述当前字节的后若干字节。
作为本申请的另一可行实施例,所述响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中,包括:
响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值以及参考字节写入哈希表中与所述写地址对应的存储单元中;所述参考字节至少包括所述待压缩数据中所述写入字节组对应的后一字节;
所述若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点,包括;
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则且所述目标数组中的参考字节与所述待匹配字节对应的参考字节相同,则将所述待匹配字节以及所述参考字节确定为所述待压缩数据中的匹配点。
作为本申请的一种可行实施例,所述获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的至少一哈希值的步骤之前,所述方法还包括:
响应于接收的脉冲指令,将预设的哈希表中的存储单元进行初始化处理,以将全部存储单元的数据置为0。
作为本申请的一种可行实施例,所述根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据,包括:
根据所述待匹配字节从匹配点位置开始进行数据匹配,确定所述匹配点各临近位置处对应的匹配结果;
对所述匹配结果进行统计以确定匹配距离和匹配字节数;
根据所述匹配距离以及所述匹配字节数对所述待压缩数据中的匹配数据进行处理,得到压缩数据。
另一方面,本申请实施例提供一种数据压缩装置,包括:
处理模块,用于获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值;所述哈希值至少包括第一哈希值以及第二哈希值;
写入模块,用于响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中;
读取模块,用于响应于一时钟周期的读操作,以所述时钟周期内每个待匹配字节组的第一哈希值作为读地址,从所述哈希表中与所述读地址对应的存储单元读取得到目标数组;
确定模块,用于若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点;
匹配模块,用于根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据。
另一方面,本申请实施例提供一种计算机设备,所述计算机设备包括:一个或多个处理器;存储器;以及一个或多个应用程序,其中所述一个或多个应用程序被存储于所述存储器中,并配置为由所述处理器执行以实现上述所述的用于数据压缩的数据压缩方法。
另一方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器进行加载,以执行上述所述的用于数据压缩的数据压缩方法。
本申请在获取到待压缩数据后,通过对压缩数据中的字节组进行散列,得到字节组的两组哈希值,并在硬件处理的一个时钟周期内,在该时钟周期的写操作中,以每个需要写入的字节组的其中一组哈希值作为写地址,将对应写入字节组的另一组哈希值写入与该写地址对应的存储单元中,并在一个时钟周期内,在该时钟周期的读操作中,以每个待匹配的字节组的一组哈希值作为读地址,从对应地址的存储单元中读取数据,若能读取到存在另一组哈希值的目标数组,则表明该地址已预先通过其他写入字节的哈希值作为索引写入了,且待匹配的字节组的另一组哈希值也与该写入字节组的另一组哈希值相同,这两个字节组有较高可能性重复,从而便于后续以该字节组作为匹配点进行数据匹配。通过前述对字节组的批量写入以及读取操作,就可以利用硬件处理的一个时钟周期完成对多组数据的并行匹配,在处理大量数据时相比于传统的串行数据匹配方法更加高效,能够快速完成对数据中重复字节部分的匹配,从而进一步提高了后续的数据压缩效率。
附图说明
图1为本申请实施例提供的一种数据匹配方法的步骤流程示意图;
图2为本申请实施例提供的另一种数据匹配方法的步骤流程示意图;
图3为本申请实施例提供的对字节进行散列处理得到哈希值的步骤流程示意图。
图4为本申请实施例提供的又一种数据匹配方法的步骤流程示意图;
图5为本申请实施例提供的一种从匹配点位置进行数据匹配以得到压缩数据的步骤流程示意图;
图6a为本申请实施例提供的实现数据匹配方法的电路模块框图的示意图;
图6b为本申请实施例提供的在一时钟周期的写入状态下哈希表中存储数据的示意图;
图6c为本申请实施例提供的在一时钟周期的读取状态下哈希表中存储数据的示意图;
图7为本申请实施例提供的用于数据压缩的数据匹配装置的结构示意图;
图8为本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请的描述中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本申请的描述中,“例如”一词用来表示“用作例子、例证或说明”。本申请中被描述为“例如”的任何实施例不一定被解释为比其它实施例更优选或更具优势。为了使本领域任何技术人员能够实现和使用本发明,给出了以下描述。在以下描述中,为了解释的目的而列出了细节。应当明白的是,本领域普通技术人员可以认识到,在不使用这些特定细节的情况下也可以实现本发明。在其它实例中,不会对公知的结构和过程进行详细阐述,以避免不必要的细节使本发明的描述变得晦涩。因此,本发明并非旨在限于所示的实施例,而是与符合本申请所公开的原理和特征的最广范围相一致。
为便于理解本申请实施例提供的用于数据压缩的数据匹配方法的实现步骤,先对数据匹配方法的相关应用场景进行说明。具体的,本申请提供的数据匹配方法通常应用于数据压缩过程中,其中,数据压缩是一种通过对数据中重复部分进行处理,从而减少数据量,以达到压缩效果的手段,以常见的LZ77算法为例,其通常是利用一组三元组(ll,ml,of)可以来描述重复部分的特征,其中,在该三元组中,ll表示未匹配的字节个数,ml表示匹配到的字节个数,而of则表示两个相同字段之间的距离。具体的,为便于理解上述三元组的含义,以输入文本“0123456789abcd0123456aaa123456789”为例,在该文本第二次出现0123456时,可以将0123456用三元数组(14,7,14)表示,其中第一个14表示该匹配部分之前共有14个字节未匹配(0123456789abcd),而数组中的7表示此次匹配有7个字节重复(0123456),数组中的第二个14表示该字节和之前重复出现的字节之间存在14个字节,即第二次出现的0123456与第一次出现的0123456之间存在14个字节的偏移量差异,同理,对于aaa之后的123456789,可以认为其与第一次出现的123456789匹配,此时共有9个重复字节部分,偏移量为与第一次出现的123456789之间的距离,即24,此时该字符串可以用三元数组(3,9,24)表示,当然,也可以认为其中的“123456”与第二次出现的123456匹配,此时共有6个重复字节部分,偏移量为与第二次出现的123456之间的距离,此时该字符串可以用三元数组(3,6,8)+未匹配字符串“789”表示,因此,当采用第一种形式时,前述输入文本可以压缩处理为:0123456789abcd(14,7,14)aaa(3,9,24),而当采用第二种形式时,前述输入文本可以压缩处理为:0123456789abcd(14,7,14)aaa(3,6,8)789。当然,需要说明的是,前述所提供的描述仅仅只是作为对压缩数据的理解,并不构成对数据压缩方案的限制。
结合前述描述可以看出,不管采用何种形式来压缩数据,对数据中重复部分的匹配都是必不可少的,即对数据中重复部分的匹配识别的效率会影响到后续数据压缩过程的效率。然而,目前相关数据压缩过程中对重复部分的匹配识别通常是基于软件运算确定的,例如常见的LZ77算法中的滑动窗口匹配方法,但上述过程本质上只是进行了指针的移位操作,实际操作为串行方案,在数据量较大时,需要依次进行匹配,从而影响到后的数据压缩效率。
而正是为了解决上述问题,本申请提供一种基于硬件实现的用于数据压缩的数据匹配方法、装置、设备及存储介质,其中,数据匹配方法通常是以计算机程序的方式设置于数据匹配装置中,数据匹配装置通常是以处理器的形式设置于计算机设备,计算机设备中的数据匹配装置通过运行数据匹配方法所对应的计算机程序,以执行本申请实施例所提供的数据匹配方法。具体的,如图1所示,图1为本申请实施例所提供的一种数据匹配方法的步骤流程示意图,具体的,包括步骤S110~S150:
S110,获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值;所述哈希值至少包括第一哈希值以及第二哈希值。
本申请实施例中,结合前述所提供的应用场景可知,待压缩数据是指数据匹配装置所获取到的需要进行数据压缩处理的数据,该待压缩数据通常是由一定长度的字符串组成,而其中每一个字符会被编码为一个字节。在此基础上,通过对该字节进行散列处理,通常情况下可以得到描述该字节唯一标识的哈希值。具体的,考虑到在实际匹配过程中通常都是将若干连续重复的字节,即一定长度的字节组进行压缩,对单一重复的字节无需进行压缩,也就是说,本申请实施例提供的方案中,通常情况下,并不是针对每一字节单独进行散列处理,而是会将待压缩数据按照一定的规则进行划分,得到字节组,并对字节组进行散列处理,得到哈希值。例如,作为一种最常见的可行实现方案,数据匹配装置会以待编码数据中的每个字节为当前字节,将当前字节和后续相邻的若干字节划分为一组,并对该字节组进行散列处理,得到哈希值,也就是针对待压缩数据中的每一字节,对包含字节的字节组进行散列处理,得到字节组的哈希值。具体的,为便于理解,以字节组包含三个字节为例,此时数据匹配装置会以待编码数据中的每个字节为当前字节,将当前字节和后续相邻的两个字节划分为一组数据,即三个字节为一组,data0data1 data2为第一字节组(即第一组数据),data1 data2 data3为第二字节组(第二组数据)。
进一步的,散列(Hashing)是计算机科学中一种对资料的处理方法,即把任意长度的输入通过散列算法变换成固定长度的输出,也就是建立起输入(要检索的项)和输出(用来检索的索引,即哈希值)之间的关联关系,生成一种便于搜索的数据结构,即散列表,在本申请实施例中,散列表也被称之为哈希表。进一步的这里的散列算法可以基于实际需求所设定。具体的,以前述提供的字节组为例,此时,当字节组不同,即每个字节组中包含的三个字节不完全相同时,通常情况下对其进行散列处理所得到的哈希值也并不相同,也就是说,在绝大多数情况下,对不同的数据进行散列处理所得到的哈希值通常情况下是不同的,但哈希值不同则代表原数据一定不同,因此,相比于直接查找原数据,通过比对哈希值可以在一定程度上节省计算时间以及资源。当然,在少部分特殊情况下,对不同的数据进行散列处理所得到的哈希值可能会相同,也即存在哈希冲突,而为了解决上述问题,本申请实施例是在对字节的散列处理中,具体得到字节的两个哈希值,其中一个哈希值用于字节的索引值,用于向对应地址的存储单元中写入数据,而另一个哈希值则作为校验值,用于被写入对应地址的存储单元中,并在被读取之后进一步进行数据的校验,也就是说如果两个字节组散列得到的第一哈希值相同,且第二哈希值相同,则很大概率可以保证两个字节组是相同。
此外,考虑到本申请实施例提供的数据匹配方法主要是基于硬件所实现的,即需要将数据对应写入存储单元,为了避免存储单元中预先存储的数据对数据匹配过程中产生干扰,因此,在获取待压缩数据,通常还需要基于预先接收到的用于描述匹配开始的脉冲指令,来对存储单元中的数据进行处理处理,以将全部存储单元置于低点位,即将全部存储单元中记录的数据初始化为0。
S120,响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中。
本申请实施例中,在此基础上,为了利用硬件快速实现对数据中重复部分字节的匹配,数据匹配装置会通过哈希表的数据结构来对数据进行读写操作,具体的,也就是在对字节组进行散列处理得到第一哈希值以及第二哈希值之后,响应于一个时钟周期的写操作,确定每个需要写入哈希表中的写入字节组,并基于这些写入字节组的第一哈希值作为写地址,将其对应的第二哈希值写入哈希表中与该写地址对应的存储单元中,也就是说,若第一哈希值不同,则这些字节组的第二哈希值会被写入不同地址的存储单元中。
进一步的,为快速确定这些字节组在待匹配数据中的位置,作为本申请的另一可行实施例,这些字节组的偏移量,也就是描述这些字节组在待匹配数据中的位置同样会被写入对应地址的存储单元中,具体的实现方案可以参阅后续图2及其解释说明的内容。。
当然,考虑到在前述的过程中,通常会将待压缩数据划分为若干个字节组来进行对数据的匹配,具体的,所划分的字节组中字节数量越多,虽然能在一定程度上提高字节进行匹配的效率,但相应的,出现哈希冲突的可能性也就越高,影响后续匹配的精度,因此,对待压缩数据划分所得到的字节组中不易包括过多的字节,例如,最常见的一种实现方案,可以以三个字节为一组,即将当前字节与该字节相邻的后两个字节划分为一组,但考虑到上述方案只能实现三个字节的匹配,当待压缩数据中存在更多重复的部分时,例如连续4个字节、连续5个字节部分重复,则需要更多的读写操作来确认重复部分,而为了提高匹配效率,作为本申请的又一可行实施例,在一时钟周期的写操作中,被写入对应存储单元的数据除了包括写入字节的偏移量外,还可以包括参考字节,即该字节组的下一字节,next_byte,例如,以前述三个字节为一组,此时写入的参考字节为第四个字节部分,这样当读取到对应存储单元的数据之后,可以进一步基于数组中的next_byte来判断该重复字节组的后续是否存在更多重复字节部分,从而进一步提高了数据匹配的效率,具体的实现方案可以参阅后续图4及其解释说明的内容。
S130,响应于一时钟周期的读操作,以所述时钟周期内每个待匹配字节组的第一哈希值作为读地址,同时从所述哈希表中与所述读地址对应的存储单元读取得到对应的目标数组。
进一步的,在数据写入之后,为了实现对字节组的匹配,在本申请实施例中,会响应于一时钟周期的读操作,基于该时钟周期内每个需要匹配的待匹配字节组的第一哈希值作为读地址,来从哈希表中与该读地址对应的存储单元中进行读数处理,通常情况下,存储单元包括两种状态,在一时钟周期的写操作内,其写地址与某个写入字节组的第一哈希值对应,从而写入了该字节组的第二哈希值,以及未写入数据,因此,从哈希表中对应的存储单元读取得到目标数组包含两种可能,一种为包含了一写入字节组对应的第二哈希值,而另一种则为0。
可以看出,通过前述操作,当哈希表同时由多个存储单元组成时,在一次时钟周期的读写操作内,就可以批量对多个数据进行并行匹配,例如,以一种由16*16,即256个存储单元(RAM)所组成的哈希表为例,此时,每次读写操作可以同时处理16*16组数据,即每个时钟周期可以同时实现将16组数据与在先的16组数组进行匹配,相比于现有的串行匹配流程,大大提高了数据匹配的效率,从而进一步提高了后续数据压缩的效率。
S140,若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点。
本申请实施例中,结合前述相关描述可知,从哈希表中对应的存储单元所读取得到目标数组包括两种,一种为未写入数据,即目标数组为0,而另一种则为写入了哈希值的数组,因此,当目标数组中存在一写入字节组对应的第二哈希值,表明该待匹配字节组的第一哈希值与另一写入字节组的第一哈希值相同。在此基础上,通过进一步判断该目标数组中存在的哈希值与待匹配字节组的第二哈希值进行比对,若相同,则表明该待匹配字节组和写入字节组相同,因此,该待匹配字节的字节内容即为待压缩数据中的重复部分,就可以将该待匹配字节确定为待压缩数据中的匹配点,以用于后续进一步的匹配。
S150,根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据。
本申请实施例中,根据待匹配字节从匹配点位置开始进行数据匹配,就可以识别出待压缩数据中的全部匹配数据,而在完成对全部待压缩数据的处理之后,基于所确定出的全部匹配字节以及之间的匹配距离,对该待压缩数据进行压缩处理,例如按照前述应用场景中所提供的LZ77算法的压缩思想,通过统计当前匹配字节与上一匹配字节之间的距离作为LZ77算法三元组中的ll值,通过统计匹配字节的长度作为LZ77算法三元组中的ml值,将前述得到的匹配距离作为作为LZ77算法三元组中的of值,用得到的三元数组(ll,ml,of)来替换这一部分匹配字节,就可以得到最终的压缩数据。具体的实现方案可以参阅后续图5及其解释说明的内容。
当然,当存储单元中写入的数据除了包括写入字节组的第二哈希值之外,还包括有其他数据时,此时,所读取得到目标数组中的其他数据会进一步辅助数据匹配装置更好的完成数据匹配流程,例如,当存储单元中写入的数据还包括写入字节组的偏移量时,此时基于所读取得到的偏移量可以进一步确定待匹配字节在待压缩数据中的位置,从而便于快速确定匹配位置,此外,当存储单元中写入的数据包括写入字节的参考字节,也就是对应字节组的后一字节时,此时基于所读取得到的参考字节与待匹配字节的参考字节进行匹配,可以进一步确定该匹配字节的后续部分是否还存在的重复字节内容,从而无需再次基于读写操作来对后续字节内容进行进一步的重复判断,提高了匹配的效率。具体的实现方案可以分别参阅后续图2以及图4及其解释说明的内容。
本申请在获取到待压缩数据后,通过对压缩数据中的字节组进行散列,得到字节组的两组哈希值,并在硬件处理的一个时钟周期内,在该时钟周期的写操作中,以每个需要写入的字节组的其中一组哈希值作为写地址,将对应写入字节组的另一组哈希值写入与该写地址对应的存储单元中,并在一个时钟周期内,在该时钟周期的读操作中,以每个待匹配的字节组的一组哈希值作为读地址,从对应地址的存储单元中读取数据,若能读取到存在另一组哈希值的目标数组,则表明该地址已预先通过其他写入字节的哈希值作为索引写入了,且待匹配的字节组的另一组哈希值也与该写入字节组的另一组哈希值相同,这两个字节组有较高可能性重复,从而便于后续以该字节组作为匹配点进行数据匹配。通过前述对字节组的批量写入以及读取操作,就可以利用硬件处理的一个时钟周期完成对多组数据的并行匹配,在处理大量数据时相比于传统的串行数据匹配方法更加高效,能够快速完成对数据中重复字节部分的匹配,从而进一步提高了后续的数据压缩效率,由于整个处理过程使用全流水线设计,可以大大提高硬件设备的性能。
如图2所示,图2为本申请实施例提供的另一种数据匹配方法的步骤流程示意图,具体的,包括步骤S210~S220:
S210,响应于一时钟周期的写操作,以所述时钟周期内写入字节组的第一哈希值作为写地址,将所述写入字节组对应的偏移量和第二哈希值写入哈希表中与所述写地址对应的存储单元中。
与图1示出的在一时钟周期的写操作流程不同的是,本申请实施例中,是将写入字节组的偏移量和第二哈希值同时写入哈希表中对应的存储单元中,具体的,写入字节组的偏移量可以采用一个13比特的数组Addr描述,其描述了写入字节组在待压缩数据中的位置。而对于第二哈希值的描述本申请实施例在此不再赘述。
S220,若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则基于所述目标数组中的偏移量确定所述待匹配字节在所述待压缩数据中的匹配点。
本申请实施例中,在前述完成的数据的写入过程中,响应于一时钟周期的读操作,数据匹配装置会进一步以时钟周期内待匹配字节的第一哈希值作为读地址,从哈希表中与读地址对应的存储单元读取得到目标数组。当然,考虑到前述读操作与前述步骤S130提到的读操作不存在差异,因此,本申请实施例在此不再赘述,具体可以参阅前述步骤S130以及相关解释的说明。
进一步的,由于写入存储单元的数据包括写入字节组的偏移量以及第二哈希值,因此,当待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,此时,数据匹配装置会进一步基于目标数组中的偏移量来确定待匹配字节在待压缩数据中的匹配点,具体的,此时的匹配点进一步包含了待匹配字节在待压缩数据中的位置,在后续进行匹配的过程中,能快速定位到待匹配字节以在近邻位置进行匹配,从而进一步提高了匹配的效率。
如图3所示,图3为本申请实施例提供的一种对字节组进行散列处理得到哈希值的具体实现流程,具体的,包括步骤S310~S330:
S310,针对所述压缩数据中的每一字节组,对所述字节组进行分割,得到第一比特位和第二比特位。
本申请实施例中,由于第一哈希值和第二哈希值均与字节组相关,因此,可以通过对字节组进行分割,得到不同长度的第一比特位和第二比特位,例如,作为本申请的一种可行实现方案,以每次散列处理对包含三个字节的字节组处理为例,由于每个字节通常情况下包括8bit(比特),即一个三位字节的字节组通常包含24比特位,因此,可以对其进行分割,提取出其中5位比特作为第一比特位,将剩余的19位比特作为第二比特位,例如,作为最常见的一种实现方案,可以将字节组中第一字节的前5位提取出来,作为第一比特位,而剩余的部分,即第一字节的后三位,以及第二字节和第三字节的8位比特组合起来,得到第二比特位。
S320,将所述第二比特位确定为第二哈希值。
本申请实施例中,由于第二哈希值作为数据的校验值,精度要求可以更高,比特位数可以要求更高,因此,可以直接将比特位数更多的第二比特位确定为第二哈希值,当然,对第二比特位进行一定的处理得到具有足够比特位数的值来作为第二哈希值也是可行的。
S330,将所述第二比特位的散列结果与所述第一比特位合并,得到第一哈希值。
本申请实施例中,在前述的基础上,由于第一哈希值作为存储单元读写地址的索引值,通常情况下受到硬件资源的限制(第一哈希值的位宽每增加1,硬件资源就要翻一倍),其包含的位数无法过高,但同时需要与全部字节信息相关。因此,可以将第二比特位的散列结果与第一比特位合并来生成最终的第一哈希值。具体的例如,以常见的16*16的哈希表为例,常用的索引数据长度应当为10位比特,即要求第一哈希值的长度为10比特,因此,可以先将第二比特位处理为5位长度的散列结果,再与五位长度的第一比特位合并,从而得到最终的第一哈希值。
当然,前述所提供的方案,仅仅是一种对字节进行散列处理得到第一哈希值和第二哈希值的可行实现手段的说明,事实上,基于实际需求对字节进行散列处理以保证第一哈希值和第二哈希值满足前述所提到要求均应当属于本申请所要求保护的范围之内,本申请对于对字节进行散列处理所用到的具体散列算法不做限制。
如图4所示,图4为本申请实施例提供的又一种数据匹配方法的步骤流程图,具体地,包括步骤S410~S430:
S410,响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,将所述写入字节组对应的第二哈希值以及参考字节写入哈希表中与所述写地址对应的存储单元中。
与图1示出的将写入字节的第二哈希值写入哈希表中对应的存储单元不同的是,本申请实施例中,还会将写入字节组的参考字节同步写入哈希表中对应的存储单元中,其中,参考字节至少包括待压缩数据中写入字节对应的字节组的后一字节。例如,以前述提供的以每三个字节为一组对数据进行划分的实施例为例,其中,对于由data0,data1以及data2所组成的字节组,在对该字节组进行散列处理得到第一哈希值之后,会以写入字节的第一哈希值作为写地址,将该写入字节的第二哈希值以及参考字节,也就是待压缩数据中位于该字节组的后一字节即data3(一个8比特位的数据)写入到对应的存储单元中。
S420,若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,且所述目标数组中的参考字节与所述待匹配字节对应的参考字节相同,则将所述待匹配字节以及所述参考字节确定为所述待压缩数据中的匹配点。
本申请实施例中,在前述完成的数据的写入过程中,响应于一时钟周期的读操作,数据匹配装置会进一步以时钟周期内待匹配字节的第一哈希值作为读地址,从哈希表中与读地址对应的存储单元读取得到目标数组。当然,考虑到前述读操作与前述步骤S130提到的读操作不存在差异,因此,本申请实施例在此不再赘述,具体可以参阅前述步骤S130以及相关解释的说明。
进一步的,由于写入存储单元的数据包括第二哈希值以及参考字节,因此,当目标数组中存在的目标哈希值与待匹配字节组的第二哈希值相同,此时,数据匹配装置会进一步将目标数组中的参考字节与待匹配字节对应的参考字节(即位于待匹配字节之后的后一字节)进行比对,以判断待匹配字节和写入字节在后续字节是否存在重复部分,若将目标数组中的参考字节与待匹配字节对应的参考字节不同,则表明待匹配字节和写入字节在后续字节上不相同,此时将待匹配字节标记为待压缩数据中的匹配点即可,反之,若目标数组中的参考字节与待匹配字节对应的参考字节相同,则会进一步将待匹配字节以及参考字节确定为待压缩数据中的匹配点,以用于后续的匹配查找。,
当然,前述所提供的实施例是分别以将第二哈希值作为校验值与偏移量写入存储单元以避免因哈希冲突所带来的数据匹配精度的误差,以及将参考单元与偏移量写入存储单元以快速完成对重复匹配字节后续数据的匹配判断,从而提高数据匹配的效率,事实上,作为本申请的又一可行实施例,写入存储单元的数据还可以同时包括偏移量Addr、第二哈希值Hash以及参考字节next_byte,其中偏移量Addr13比特位,第二哈希值19比特位,参考字节8比特位,最终写入存储单元的为1组40比特位的数组,这样在完成一次时钟周期的读操作后,数据存储单元会根据时钟周期内待匹配字节的哈希值作为读地址,从对应的读地址中读取得到若干组40比特位的数组,以一个16*16大小的哈希表为例,则数据存储单元会读取得到16*16个40比特位的数组,并以数据矩阵的形式记录下来,其中,这些数组中有的数组为0,表示未写入有效数据,而另一部分数组非0,表明该数组为写入数据的有效数组,因此,通过将矩阵中的0数值部分去除,所得到的剩余的有效数组就可以被确定为匹配点,用于后续的数据匹配,例如,先基于数组中的第二哈希值校验该匹配字节与写入字节是否真的重复,再进一步基于偏移量确定匹配字节和写入字节之前的匹配距离,以及基于参考字节进一步对匹配字节和写入字节的后续字节部分内容进行进一步的匹配。
如图5所示,图5为本申请实施例提供的一种从匹配点位置进行数据匹配以得到压缩数据的步骤流程示意图,具体的,包括步骤S510~S530:
S510,根据所述待匹配字节从匹配点位置开始进行数据匹配,确定所述匹配点各临近位置处对应的匹配结果。
本申请实施例中,通常情况下可以从匹配点位置开始查找前后16个字节的内容,例如,匹配位置为d32,此时会从d28~d43中进行查找,即向前查找d28~d31字节的数据,向后查找d33~d43字节上的数据,从而确定待压缩数据中的完整匹配字节,通过前述比对方式,就可以将待压缩数据中的重复匹配字节和不重复字节用不同的标识符号进行标识,例如,可以采用标识位0描述重复匹配字节,用标识位1描述不重复字节,则1110_0000_01111_1111可以表示在前后16个字节内容中,从第4字节到第9字节的内容为重复部分,其余部分为不重复字节。
S520,对所述匹配结果进行统计以确定匹配距离和匹配字节数。
本申请实施例中,在前述得到用于标识重复匹配字节以及不重复字节的基础上,通过对生成的字符串进行进一步的统计,可以进一步确定匹配距离和匹配字节数了,例如,字符串中连续出现的0的数量,可以表示匹配点中匹配字节数,而字符串中连续出现的1的数量,则可以表示匹配距离。
S530,根据所述匹配距离以及所述匹配字节数对所述待压缩数据中的匹配数据进行处理,得到压缩数据。
基于所确定出的全部匹配字节以及之间的匹配距离,对该待压缩数据进行压缩处理,例如按照前述应用场景中所提供的LZ77算法的压缩思想,通过统计当前匹配字节与上一匹配字节之间的距离作为LZ77算法三元组中的ll值,通过统计匹配字节的长度作为LZ77算法三元组中的ml值,将前述得到的匹配距离作为作为LZ77算法三元组中的of值,用得到的三元数组(ll,ml,of)来替换这一部分匹配字节,就可以得到最终的压缩数据。
需要说明的是,前述所提供的数据匹配方法依赖于硬件来实现对数据的并行处理,因此,为了清楚理解本申请实施例所提供的数据匹配方法,下述将结合前述图1~图5所提供的内容,给出一种数据匹配方法的完整实现流程以及实现该数据匹配方法的电路模块示意图,具体的,实现该数据匹配方法的电路模块框图的示意图如图6a所示,在该电路模块框图中具体包括:数据输入模块610(Data In)、哈希表模块620(Hash_top)、哈希表简化模块630(Hashtable_simpilfy)、匹配点选择模块640(Select_match_point)、原文检索模块650(Text search)以及数据比较模块660(Data_compare),基于该电路模块框图所实现的数据匹配方法具体包括如下步骤:
1)在上电或者批量的数据输入结束后,根据指令层(例如压缩流程中为Lz77top层)发出的指令脉冲,哈希表模块620在检测到该指令脉冲后进行初始化,将内部的数据全部写0,并在完成初始化后,发出初始化完成(reset_finish)信号,以将data_full拉低,表明处于空闲允许接收数据进行处理,等到pcie(一种高速串行计算机扩展总线标准)的数据传入,为便于描述,本申请使用的哈希表模块620为16*16大小,即由256个存储单元(RAM)组成,当然,哈希表模块大小越大,则允许进行匹配的数据量越多,但相应的硬件成本也就越高,具体所使用的哈希表模块大小可以基于实际需求设定;
2)数据输入模块610通过pcie接收到待编码数据数据后,将当前时钟周期内的待编码数据按照三个字节为一组,划分成n个第一数据,例如,data0 data1data2为第一组数据,data1 data2 data3为第二组数据,其中,一组数据(字节组)包括3个字节,每个字节包括8比特,因此,一组数据包括24比特;
3)在完成对数据的划分之后,数据输入模块610进一步计算每组数据的第一哈希值和第二哈希值,其中,可以从24比特中抽取5比特数据作为第一哈希值的一部分,将剩余的19比特数据作为第二哈希值,并对这19比特数据散列得到5比特数据后,与抽取的5比特数据合并,得到此组数据的第一哈希值(10比特);
4)数据输入模块610在一个时钟周期的写操作内,分别以写入数据的第一哈希值作为写地址,将该组数据的第二哈希值(19比特)、该组数据的偏移量Addr(13比特)以及该组数据的下一字节数据next_byte(8比特)对应写入哈希表对应的地址中;具体的,为便于理解,可以将第二哈希值(19比特)、该组数据的偏移量Addr(13比特)以及该组数据的下一字节数据next_byte(8比特)称为第二数据,并在一个时钟周期内,以每个写入数据的索引值(第一哈希值)按顺序分别对应哈希表中的一行,将每个写入数据之前的数据的第二数据按顺序写入哈希表中该索引值对应的行,具体可以将当前时钟周期内的写入字节的第二数据写入哈希表中对应行列号坐标x+y<15的存储单元中,将上一时钟周期内的写入字节的第二数据写入哈希表中对应行列号坐标x+y≥15的存储单元,具体的,如图6b所示,示出了一个时钟周期内哈希表中不同存储单元所写入的数据信息,其中,rd表示哈希表中某一行的读地址(即图中的rd0~rd15),rd0即对应第一组数据(data0,data1,data2)的第一哈希值,ram(x,y)(其中,x取值为0~15,y取值为0~15),即描述了由16*16个存储单元所组成的哈希表中每个存储单元的行列号坐标,wd(即图中的wd0~wd15)表示哈希表中所写入的数据,也就是写入字节的第二数据部分,例如,wd0即对应第一组数据(data0,data1,data2)的第二数据(由偏移量Addr,第二哈希值以及下一字节数据next_byte)组成;
5)数据输入模块610在一个时钟周期的读操作内,分别以待匹配的第二哈希值作为读地址,从对应的哈希表中进行读取,得到16*16个40比特的数值,构成数据矩阵,该数据矩阵中包括未写入数据的无效数据,也就是0数值,以及写入数据的有效数据;具体的,以图6c所示出的一个时钟周期的哈希表为例,以第二组数据(data1,data2,data3)的索引值(即第一哈希值)作为读地址rd1去读取该行存储的第一组数据(data0,data1,data2)的第二数据部分,由于第一组数据的第二数据部分(偏移量、第二哈希值以及下一字节数据)是以wd0为写地址写入的,若能读取到,则说明第一组数据和第二组数据的索引值相同,若读取到的数据为0,则说明第一组数据和第二组数据的索引值不同,通过同时对哈希表中中256个存储单元进行读操作,就可以读出由16*16个40bit数据组成的第一数据矩阵,其中第一数据矩阵中包含读取成功的有效数据和读取失败的全0无效数据;
6)哈希表简化模块630进一步遍历第一数据矩阵,将第一数据矩阵中全0的无效数据去除,仅仅保留数据矩阵中的有效数据部分;
7)匹配点选择模块640进一步对保留的数据进行处理,利用第二哈希值进行校验,利用偏移量记录匹配距离,从而找到有效数据中的匹配点,每个匹配点包括有效匹配数据的坐标和地址;
8)根据每个匹配点确定当前数据位置和匹配位置,即原文检索模块650可以根据当前数据位置和匹配位置在字典(text_ram)中进行检索,以找到第一待匹配数据和第二待匹配数据,并根据匹配结果计算出每个位置的匹配长度和匹配偏移量,并记录当前的匹配位置;
具体的,在前述数据输入模块610接收待编码数据的同时,还会将原文数据存入字典(text_ram)中,其中,字典(text_ram)包括3组存储单元来存储待编码数据,可同时进行3个匹配点的匹配,每组由8个16*1024的存储单元组成;根据选出的匹配点确定当前数据位置并找到第一待匹配数据,确定匹配位置并找到第二待匹配数据;
其中,根据匹配位置找到第二待匹配数据如下:由于每个字典的ram中存入的数据为2字节(16bit),根据匹配的需求,每组需要查找的数据是16字节(因为有8个ram),向前4位,向后12位,但匹配位置为奇数时,要查找的数据是ram中的一个数据,因此可以根据匹配位置的奇偶来区分查找模式,其中当匹配位置为偶数时,可以在字典(text_ram)向前4位,向后12位进行查找,当匹配位置是奇数时,可以在字典(text_ram)向前5位,向后11位进行查找,如匹配位置为d32,需要的数据是d28-d43,其中d28-d31向前查找,d32-d43向后查找。若匹配位置为d33,需要的数据也是d28-d43,其中d28-d32向前查找,d33-d43向后查找;
根据匹配结果计算出每个位置的匹配长度和匹配偏移量,并记录当前的匹配位置是指将第一待匹配数据和第二待匹配数据每个对应位置字节进行异或判断,结果为不同时将标识位置为1,结果为相同时将标识位置为0,然后根据字节中标识位置为0的数量确定三元组的中匹配长度ml,再根据匹配位置match addr(偏移量)和当前数据位置current addr(偏移量)之间的距离确定三元组的of(即两个相同字段之间的距离),并进一步确定剩余未匹配字节的所在位置以及字节数量,确定三元组中的ll,以输出最终的三元数组以及其他未匹配字段;
9)基于输出的数据执行后续的数据压缩流程。
为了更好实施本申请实施例提供的用于数据压缩的数据匹配方法,在本申请实施例所提供的用于数据压缩的数据匹配方法的基础之上,本申请实施例中还提供一种用于数据压缩的数据匹配装置,如图7所示,用于数据压缩的数据匹配装置700包括:
处理模块710,用于获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值;所述哈希值至少包括第一哈希值以及第二哈希值;
写入模块720,用于响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中;
读取模块730,用于响应于一时钟周期的读操作,以所述时钟周期内每个待匹配字节组的第一哈希值作为读地址,同时从所述哈希表中与所述读地址对应的存储单元读取得到对应的目标数组;
确定模块740,用于若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点;
匹配模块750,用于根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据。
在本申请一些实施例中,所述写入模块720还用于响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的偏移量和第二哈希值写入哈希表中与所述写地址对应的存储单元中;所述确定模块740还用于若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则基于所述目标数组中的偏移量确定所述待匹配字节在所述待压缩数据中的匹配点。
在本申请一些实施例中,所述处理模块710还用于针对所述压缩数据中的每一字节组,对所述字节组进行分割,得到第一比特位和第二比特位;将所述第二比特位确定为第二哈希值;以及将所述第二比特位的散列结果与所述第一比特位合并,得到第一哈希值。
在本申请一些实施例中,所述处理模块710还用于针对所述待压缩数据中的每一字节,对包含当前字节的字节组进行散列处理,得到所述字节组的哈希值,其中所述字节组至少还包括所述待压缩数据中所述当前字节的后若干字节。
在本申请一些实施例中,所述写入模块720还用于响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值以及参考字节写入哈希表中与所述写地址对应的存储单元中;所述参考字节至少包括所述待压缩数据中所述写入字节组对应的后一字节;所述确定模块740还用于若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,且所述目标数组中的参考字节与所述待匹配字节对应的参考字节相同,则将所述待匹配字节以及所述参考字节确定为所述待压缩数据中的匹配点。
在本申请一些实施例中,所述处理模块710还用于响应于接收的脉冲指令,将预设的哈希表中的存储单元进行初始化处理,以将全部存储单元的数据置为0。
在本申请一些实施例中,所述匹配模块750还用于
根据所述待匹配字节从匹配点位置开始进行数据匹配,确定所述匹配点各临近位置处对应的匹配结果;对所述匹配结果进行统计以确定匹配距离和匹配字节数;根据所述匹配距离以及所述匹配字节数对所述待压缩数据中的匹配数据进行处理,得到压缩数据。
关于用于数据压缩的数据匹配装置的具体限定可以参见上文中对于用于数据压缩的数据匹配方法的限定,在此不再赘述。上述用于数据压缩的数据匹配装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在本申请一些实施例中,用于数据压缩的数据匹配装置700可以实现为一种计算机程序的形式,计算机程序可在如图8所示的计算机设备上运行。计算机设备的存储器中可存储组成该用于数据压缩的数据匹配装置700的各个程序模块,比如,图7所示的处理模块710、写入模块720、读取模块730、确定模块730和匹配模块750。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的用于数据压缩的数据匹配方法中的步骤。
例如,图8所示的计算机设备可以通过如图8所示的用于数据压缩的数据匹配装置800中的处理模块710执行步骤S110。计算机设备可通过写入模块720执行步骤S120。计算机设备可通过读取模块730执行步骤S130。计算机设备可通过确定模块740执行步骤S140。计算机设备可通过匹配模块750执行步骤S150。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的计算机设备通过网络连接通信。该计算机程序被处理器执行时以实现一种用于数据压缩的数据匹配方法。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在本申请一些实施例中,提供了一种计算机设备,包括一个或多个处理器;存储器;以及一个或多个应用程序,其中一个或多个应用程序被存储于存储器中,并配置为由处理器执行以实现以下步骤:
获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值;所述哈希值至少包括第一哈希值以及第二哈希值;
响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中;
响应于一时钟周期的读操作,以所述时钟周期内每个待匹配字节组的第一哈希值作为读地址,同时从所述哈希表中与所述读地址对应的存储单元读取得到对应的目标数组;
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点;
根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据。
在本申请一些实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器进行加载,使得处理器执行以下步骤:
获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值;所述哈希值至少包括第一哈希值以及第二哈希值;
响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中;
响应于一时钟周期的读操作,以所述时钟周期内每个待匹配字节组的第一哈希值作为读地址,同时从所述哈希表中与所述读地址对应的存储单元读取得到对应的目标数组;
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点;
根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。本申请所提供的各实施例中所使用的对存储器、存储、信息库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上对本申请实施例所提供的一种用于数据压缩的数据匹配方法、装置、计算机设备和存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种数据压缩方法,其特征在于,包括:
获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值;所述哈希值至少包括第一哈希值以及第二哈希值;
响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中;
响应于一时钟周期的读操作,以所述时钟周期内每个待匹配字节组的第一哈希值作为读地址,同时从所述哈希表中与所述读地址对应的存储单元读取得到对应的目标数组;
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点;
根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据。
2.根据权利要求1所述的数据压缩方法,其特征在于,所述响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中,包括:
响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的偏移量和第二哈希值写入哈希表中与所述写地址对应的存储单元中;
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点,包括:
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则基于所述目标数组中的偏移量确定所述待匹配字节在所述待压缩数据中的匹配点。
3.根据权利要求1所述的数据压缩方法,其特征在于,所述对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值,包括:
针对所述压缩数据中的每一字节组,对所述字节组进行分割,得到第一比特位和第二比特位;
将所述第二比特位确定为第二哈希值;以及
将所述第二比特位的散列结果与所述第一比特位合并,得到第一哈希值。
4.根据权利要求1所述的数据压缩方法,其特征在于,所述对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值,包括:
针对所述待压缩数据中的每一字节,对包含当前字节的字节组进行散列处理,得到所述字节组的哈希值,其中所述字节组至少还包括所述待压缩数据中所述当前字节的后若干字节。
5.根据权利要求4所述的数据压缩方法,其特征在于,所述响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中,包括:
响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值以及参考字节写入哈希表中与所述写地址对应的存储单元中;所述参考字节至少包括所述待压缩数据中所述写入字节组对应的后一字节;
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点,包括:
若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,且所述目标数组中的参考字节与所述待匹配字节对应的参考字节相同,则将所述待匹配字节以及所述参考字节确定为所述待压缩数据中的匹配点。
6.根据权利要求1所述的数据压缩方法,其特征在于,所述获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的至少一哈希值的步骤之前,所述方法还包括:
响应于接收的脉冲指令,将预设的哈希表中的存储单元进行初始化处理,以将全部存储单元的数据置为0。
7.根据权利要求1~6任一项所述的数据压缩方法,其特征在于,所述根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据,包括:
根据所述待匹配字节从匹配点位置开始进行数据匹配,确定所述匹配点各临近位置处对应的匹配结果;
对所述匹配结果进行统计以确定匹配距离和匹配字节数;
根据所述匹配距离以及所述匹配字节数对所述待压缩数据中的匹配数据进行处理,得到压缩数据。
8.一种数据压缩装置,其特征在于,包括:
处理模块,用于获取待压缩数据,并对所述待压缩数据中的字节组进行散列处理,得到所述字节组的哈希值;所述哈希值至少包括第一哈希值以及第二哈希值;
写入模块,用于响应于一时钟周期的写操作,以所述时钟周期内每个写入字节组的第一哈希值作为写地址,分别将所述写入字节组对应的第二哈希值写入哈希表中与所述写地址对应的存储单元中;
读取模块,用于响应于一时钟周期的读操作,以所述时钟周期内每个待匹配字节组的第一哈希值作为读地址,同时从所述哈希表中与所述读地址对应的存储单元读取得到对应的目标数组;
确定模块,用于若所述待匹配字节组对应的目标数组中存在的目标哈希值与所述待匹配字节组的第二哈希值相同,则将所述待匹配字节确定为所述待压缩数据中的匹配点;
匹配模块,用于根据所述待匹配字节从匹配点位置开始进行数据匹配,生成压缩数据。
9.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储器;以及
一个或多个应用程序,其中所述一个或多个应用程序被存储于所述存储器中,并配置为由所述处理器执行以实现权利要求1至7中任一项所述的用于数据压缩的数据压缩方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器进行加载,以执行权利要求1至7任一项所述的用于数据压缩的数据压缩方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311591674.9A CN117526963A (zh) | 2023-11-24 | 2023-11-24 | 数据压缩方法、装置、计算机设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311591674.9A CN117526963A (zh) | 2023-11-24 | 2023-11-24 | 数据压缩方法、装置、计算机设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117526963A true CN117526963A (zh) | 2024-02-06 |
Family
ID=89766105
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311591674.9A Pending CN117526963A (zh) | 2023-11-24 | 2023-11-24 | 数据压缩方法、装置、计算机设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117526963A (zh) |
-
2023
- 2023-11-24 CN CN202311591674.9A patent/CN117526963A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220263648A1 (en) | Circuit and method for overcoming memory bottleneck of asic-resistant cryptographic algorithms | |
CN108459826B (zh) | 一种处理io请求的方法及装置 | |
US11347787B2 (en) | Image retrieval method and apparatus, system, server, and storage medium | |
CN106874348B (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
US20090228680A1 (en) | Combined hash for variable data chunks | |
US20170364300A1 (en) | Controller, flash memory apparatus, method for identifying data block stability, and method for storing data in flash memory apparatus | |
CN107122130B (zh) | 一种数据重删方法及装置 | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
CN111858651A (zh) | 一种数据处理方法以及数据处理装置 | |
CN113867627B (zh) | 一种存储系统性能优化方法及系统 | |
CN117093881B (zh) | 一种数据压缩方法、装置及电子设备和存储介质 | |
US20040088474A1 (en) | NAND type flash memory disk device and method for detecting the logical address | |
CN111752482A (zh) | 一种全闪存分布式存储系统中写数据的方法及系统 | |
CN107943415B (zh) | 基于fat文件系统的查找空闲簇的方法和系统 | |
CN112511629A (zh) | 一种mpt结构的账户树的数据压缩方法及系统 | |
US11645202B2 (en) | Parsing method, parsing apparatus, electronic device, and computer storage medium | |
US10754786B2 (en) | Memory access method using simplified mapping table requiring smaller memory space | |
CN117526963A (zh) | 数据压缩方法、装置、计算机设备及可读存储介质 | |
CN115758206A (zh) | 一种快速查找ZNS固态硬盘中NorFlash上次写结束位置的方法 | |
CN109783024B (zh) | 数据存储处理方法及装置 | |
CN115934583A (zh) | 分级缓存方法、装置及系统 | |
CN104751362A (zh) | 一种订单提交方法及装置 | |
CN107341113B (zh) | Cache的压缩方法和装置 | |
US20130111164A1 (en) | Hardware compression using common portions of data | |
CN109871355B (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 |