CN113765854A - 一种数据压缩方法及服务器 - Google Patents
一种数据压缩方法及服务器 Download PDFInfo
- Publication number
- CN113765854A CN113765854A CN202010500225.9A CN202010500225A CN113765854A CN 113765854 A CN113765854 A CN 113765854A CN 202010500225 A CN202010500225 A CN 202010500225A CN 113765854 A CN113765854 A CN 113765854A
- Authority
- CN
- China
- Prior art keywords
- hash value
- block
- data block
- target data
- character string
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/04—Protocols for data compression, e.g. ROHC
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请实施例公开了一种数据压缩方法及服务器,可以用于数据主存,容灾备份或复制等场景。本申请实施例方法包括:获取已压缩的第一目标数据块,第一目标数据块中包括已经过编码的第一编码块;然后对第一目标数据块中未经过编码的第一字符串进行编码以得到第二编码块,并复用第一编码块,得到第二目标数据块;该第二目标数据块为对已经过压缩的第一目标数据块直接进行再次压缩后的数据块;本申请实施例中,对获取到的第一目标数据块直接进行数据缩减,节省解压流程的开销,并且在对第二目标数据块的压缩过程中,可以直接复用第一目标数据块中已经包含的第一编码块,从而节省匹配字符串的开销;本申请实施例中还提供了一种服务器。
Description
技术领域
本申请涉及数据压缩技术领域,尤其涉及一种数据压缩方法及服务器。
背景技术
数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少数据存储空间,提高数据传输、存储和处理效率的一种技术方法。
传统的数据压缩方法包括对数据的实时压缩方法,例如,在线流程写入的数据,数据中心接收到该数据,可以实时对该数据进行压缩。但是随着信息化的高速发展,数据量的快速增长,数据压缩对数据中心的算力要求也越来越高,这种实时数据压缩方式的压缩性能可能无法满足需求。此种情况下,通常将对数据的在线实时压缩方法和离线非实时压缩方法相结合。例如,可以在数据中心计算性能处于较为空闲状态下,开启后台压缩线程,对数据进行非实时的压缩,不仅能节省在线实时压缩的计算开销,而且压缩率可以满足性能需求。
当前对数据进行实时压缩和非实时压缩的结合方法,可以参阅图1进行理解,在线写入的数据通过压缩模块进行压缩,将压缩后的数据写入持久化的存储器。在进行后台数据缩减时,数据缩减模块会从持久化的存储器读取已经压缩的数据,并通过解压模块将该已经压缩的数据恢复到原来的数据,之后再对解压缩后的数据进行进一步的数据缩减过程。当前技术中,在后台数据缩减的过程中,需要先对已经压缩的数据进行解压,再对恢复之后的数据进行压缩,解压流程带来了额外的系统开销。
发明内容
本申请实施例提供了一种数据压缩方法,该方法应用于一种通信系统,通信系统包括客户端和服务器,客户端为装载在终端上的各种应用,该应用可以用于从特定的信息系统中提取需要被压缩的数据,客户端将待压缩的数据发送给服务器,服务器接收客户端发送的数据,对接收到的数据进行至少两次数据压缩,分别为实时压缩阶段及对实时压缩后的数据进行离线非实时压缩阶段。与传统的数据压缩方法相比,本申请中的数据压缩方法,在离线非实时压缩阶段获取到的数据块并不是解压之后的数据,而是直接从持久化的存储器获取到的压缩后的数据块,对压缩后的数据块再次进行数据缩减,以节省解压流程带来的系统开销。
第一方面,本申请实施例提供了一种数据压缩方法,该方法的执行主体可以为服务器,服务器获取已压缩的第一目标数据块,第一目标数据块中包括已经过编码的第一编码块;然后,对第一目标数据块中未经过编码的第一字符串进行编码以得到第二编码块,并复用第一编码块,从而得到第二目标数据块,该第二目标数据块至少包括第一编码块和第二编码块;该第二目标数据块为对第一目标数据块进行再次压缩的数据块,最后输出第二目标数据块;本实施例中,对获取到的第一目标数据块直接进行数据缩减,节省解压流程的开销,并且在对第二目标数据块的压缩过程中,可以直接复用第一目标数据块中已经包含的第一编码块,节省了对第一编码块进行匹配字符串的开销。
在一个可选的实现方式中,可以采用delta压缩方式对第一目标数据块进行数据缩减;进一步的,服务器获取参考数据块,该参考数据块为第一目标数据块的相似数据块,参考数据块包括第二字符串;然后进一步将第一字符串和第二字符串进行匹配;对第一字符串中匹配成功的第一子串进行编码以得到第二编码块;本实施例中,可以采用delta压缩方式对第一目标数据块进行数据缩减,以提高压缩率。
在一个可选的实现方式中,将第一字符串和第二字符串进行匹配可以具体包括:计算第一字符串中第一子串对应的第一哈希值;若第二字符串中第二子串具有对应的第二哈希值,表明在实时压缩阶段(如实时压缩阶段通过自压缩进行数据缩减),通过自压缩寻找匹配串的过程中已经计算过哈希值,并已创建哈希表,在这种情况下,直接复用该第二子串的第二哈希值即可,不需要重复计算第二子串的第二哈希值,可以减少由于计算哈希值的开销;进一步的将第一哈希值与第二哈希值匹配;当第一哈希值与第二哈希值匹配时,对第一哈希值所对应的第一子串进行编码以得到第二编码块;本实施中,可以通过哈希值的匹配来寻找第一目标数据块与参考数据块中相匹配的子串;并且在与参考数据块进行匹配的过程中,可以复用参考数据块在实时压缩阶段已经计算的哈希值,不需要重复计算参考数据块中子串的哈希值,从而节省计算哈希值的计算开销,降低离线数据缩减过程进行delta压缩时的计算量,降低离线数据缩减对系统性能的影响。
在一个可选的实现方式中,该第二字符串还包括第三子串,该第三子串无对应的哈希值;计算第三子串的第三哈希值以得到哈希值表,哈希值表至少包括第三哈希值和第二哈希值;进一步的,将第一哈希值与哈希值表中的第二哈希值和第三哈希值匹配;本示例中,若第二字符串中仅有部分子串(如第二子串)具有哈希值,而另一部分子串(如第三子串)可能不具有哈希值,这种情况下,不需要计算第二子串的哈希值,可以直接复用第二子串的哈希值,只需要计算第三子串的第三哈希值即可,以节省计算哈希值的开销。
在一个可选的实现方式中,对第一目标数据块中未经过编码的第一字符串采用第一编码方式进行编码以得到第二编码块;第一目标数据块中包括已经过第一编码方式进行编码的第一编码块,例如,该第一编码方式可以为LZ77编码方式。
在一个可选的实现方式中,第一目标数据块包括多个目标子块,每个目标子块具有对应的第一哈希值(或称为第一指纹);参考数据块包括多个参考子块,每个参考子块具有对应的第二哈希值(或称为第二指纹);多个目标子块包括第一目标子块,多个参考子块包括第一参考子块;由于第一目标数据块和参考数据块是相似数据块,那么第一目标数据块中有部分目标子块和参考数据块中的部分参考子块是相同的数据块(或称为匹配的数据块);若第一目标子块的第一哈希值与第一参考子块的第二哈希值匹配,则可以确定第一目标子块和第一参考子块为相同的数据子块,那么在进行字符串匹配的过程中,可以不再对第一目标子块中的字符串和第一参考子块中的字符串进行匹配,在对字符串的匹配过程中,并不需要按字节的进行匹配,可以跨过第一目标子块和第一参考子块,不再对第一目标子块和第一参考子块进行匹配,即第一字符串可以不包含第一目标子块,第二字符串不包含第一参考子块,以节省匹配字符串的开销。
第二方面,本申请实施例中提供了一种服务器,该服务器具有实现上述第一方面服务器所执行的功能;该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现;该硬件或软件包括一个或多个与上述功能相对应的模块。
第三方面,本申请实施例提供一种服务器,处理器,处理器与存储器耦合,存储器用于存储程序或指令,当程序或指令被处理器执行时,使得服务器执行如上述第一方面中任一项的方法。
第四方面,本申请实施例提供了计算机可读介质,用于储存计算机程序或指令,计算机程序或指令被执行时使得计算机执行如上述第一方面中任一项的方法。
第五方面,本申请提供了一种芯片,该芯片包括处理器和通信接口,处理器用于读取指令以执行上述第一方面中任一项的方法。
附图说明
图1为传统方法中数据压缩架构的一个示例的示意图;
图2为本申请实施例中通信系统的一个示例的示意图;
图3为本申请实施例中数据压缩架构的一个示例的示意图;
图4为本申请实施例中自压缩方式LZ77编码的一个示例的示意图;
图5为本申请实施例中delta压缩方式LZ77编码的一个示例的示意图;
图6为本申请实施例中一种数据压缩方法的一个实施例的步骤流程示意图;
图7为本申请实施例中数据压缩架构的另一个示例的示意图;
图8为本申请实施例中一种数据压缩方法的另一个实施例的步骤流程示意图;
图9A为本申请实施例中delta压缩方式LZ77编码的另一个示例的示意图;
图9B为本申请实施例中delta压缩方式LZ77编码的另一个示例的示意图;
图10为本申请实施例中服务器的一个示例的结构示意图;
图11为本申请实施例中服务器的另一个示例的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。
本申请实施例提供了一种数据压缩方法,该方法应用于一种通信系统。请参阅图2所示,通信系统包括客户端201和服务器202,客户端201和服务器202通信连接。服务器202接收客户端201发送的数据,服务器202用于对接收到的数据进行缩减并存储。客户端201(或也称为工作站)为装载在终端上的各种应用,该应用可以用于从特定的信息系统中提取需要被压缩的数据,或者,该客户端201为用于接收用户输入的各类数据的应用,例如该客户端201可以为浏览器、邮件客户端等。该终端可以为可以是手机(mobile phone)、可穿戴设备、平板电脑(Pad)、个人电脑、虚拟现实(virtual reality,VR)终端设备、增强现实(augmented reality,AR)终端设备、工业控制(industrial control)中的终端、车载终端设备、无人驾驶(self driving)中的终端、辅助驾驶中的终端、远程医疗(remote medical)中的终端、智能电网(smart grid)中的终端、运输安全(transportation safety)中的终端、智慧城市(smart city)中的终端、智慧家庭(smart home)中的终端等等。本申请的实施例对应用场景不做限定。客户端201将待压缩的数据发送给服务器202,服务器202接收客户端201发送的数据,对接收到的数据进行至少两次数据压缩,分别为实时压缩,及对实时压缩后的数据进行离线非实时压缩。本申请中数据缩减应用的场景包括但不限于主存场景,容灾备份场景或复制场景等对压缩性能要求较高的场景。本申请中的服务器202可以为一个服务器,例如数据中心服务器,备份服务器等。或者该服务器202也可以为多个服务器的集群,或者该服务器202也可以为云服务器等,具体的并不限定。
请参阅图3所示,服务器接收到数据,通过压缩模块对数据实时压缩,然后将压缩后的数据写入持久化的存储器,进一步的通过数据缩减模块从持久化的存储器获取到已压缩的数据块,从而对已压缩的数据块再次进行数据缩减。与传统的数据压缩方法相比,本申请中的数据压缩方法,缩减模块获取到的数据块并不是解压之后的数据,而是直接从持久化的存储器获取到的压缩后的数据块,对压缩后的数据块再次进行数据缩减,以节省解压流程带来的系统开销。
需要说明的是,图3中的压缩模块,数据缩减模块,持久化的存储器都可以为一个服务器内的组成部分。例如,该压缩模块,数据缩减模块的功能可以由服务器中的处理器,芯片或芯片系统来执行,持久化的存储器是服务器中的硬盘等存储设备。或者,图3中的压缩模块,数据缩减模块,持久化的存储器可以为不同服务器中的组成部分,例如,压缩模块,数据缩减模块的功能可以由第一服务器、或第一服务器中的处理器、芯片或芯片系统来执行。而持久化的存储器可以是第二服务器中的硬盘等存储设备。该第二服务器可以为一个服务器,或者该第二服务器也可以为一个服务器集群。在实际的架构中,压缩模块,数据缩减模块,持久化的存储器可以对应一个服务器的存储设备,也可以对应多个服务器的存储设备,具体的并不限定。
为了更好的理解本申请中的技术方案,首先对本申请中涉及的词语进行说明。
数据块:数据的存储单元,数据块可以是文件数据(如文档),或者也可以是文件数据的部分数据,该数据包括但不限于文档,音频,视频、图片、网页内容等。
持久化:是将数据在持久状态和瞬时状态间转换的机制。持久化的存储器用于连接数据存储设备,可以把数据保存到可永久保存的存储设备中(如磁盘)。
Delta压缩(delta compression):是一种广泛应用的压缩技术,用于计算目标数据和一个已经存储在系统中的参考数据之间的delta编码数据。其中,目标数据和参考数据为相似数据。通过寻找参考数据和目标数据之前相同的数据部分,并对相同的部分进行编码(如LZ77编码),从而可以确定参考数据和目标数据之间的delta(可以理解为差异)数据,实现降低目标数据大小,完成数据压缩的目的。
自压缩:对比delta压缩,仅对数据自身进行压缩。旨在将自身中重复的字符串进行编码,以进行自身数据压缩。
LZ77编码:一种数据编码方法,通过在已有字符串中寻找字符串匹配,并将匹配到的字符串使用三元组(操作,偏移,长度)进行编码,以降低数据长度的一种编码方法。其中,操作代表操作指令,如copy。偏移指匹配串之间的距离。长度指匹配串的长度。三元组可能包含其他的变形方式,如(偏移,长度,下一个字符)等,具体的并不限定。本申请实施例中,该三元组以(操作,偏移,长度)为例进行说明。需要说明的是,数据压缩的方式包括自压缩和delta压缩,无论哪种数据压缩方式都可以通过LZ77编码方式进行编码。
熵编码:一种数据编码方法,基于字符串中字符出现的比例进行重新编码,出现频率较高的字符使用较短的编码,出现频率较低的字符使用较长的编码,从而降低数据整体的编码长度,实现数据压缩。熵编码方式有多种,典型的有Huffman编码等。
进一步对自压缩方式并通过LZ77进行编码进行举例说明。请参阅4所示,目标数据块自身匹配字符串。目标数据块包括的字符串为:“abcdefhgkabcdef”,通过“滑动窗口”(也称为“窗口”)来寻找目标数据块中相同的部分,也就是匹配自身中的相同的字符串,该字符串可以理解为任意字节的序列。从目标数据块的首个字符(如“a”)开始处理,可以一个字节一个字节向后进行处理。一个固定大小的滑动窗口(如窗口的大小为4字节),随着处理的字节不断向后滑动。开始窗口内没有字节,然后从字符“a”开始进入,此时窗口内只有字符“a”,然后窗口向后滑动,窗口内包括“ab”两个字符,直到第4次滑动,此时窗口内的字符串为“abcd”。然后继续滑动窗口滑动,对于目标数据块中的每个字节,以当前处理字节为首字节的字符串和滑动窗口中的每个字符串进行匹配,寻找最长的匹配串。滑动窗口中的每个字符串是指,窗口中每个字节为首字节的字符串。如果当前处理字节为首字节的字符串在窗口中有匹配串,就用(操作,偏移,匹配长度)这样一对信息,来替换当前的字符串。字符串“abcdefhgkabcdef”中字符串“abcdef”与窗口中的“abcdef”匹配,可以将当前处理的字符串“abcdef”替换成(C,9,6)这样的三元组信息,即从第二个“a”到第一个“a”的偏移距离为9,匹配的字符串长度为6,c代表copy指令。使用三元组信息对数据进行编码,从而实现数据压缩,例如,使用了3个字节长度即可以完成对6个字节的编码,从而减小数据大小,实现数据压缩。
可选的,在字符串的匹配过程中,使用窗口进行滑动,并分别对每个窗口对应的字符串计算哈希(hash)值,构建哈希字典(或哈希表)。在计算hash的过程中,会查询hash字典,查看当前处理的字节的哈希值是否与窗内的哈希值匹配,通过字符串的哈希值的匹配来确定匹配的字符串,及匹配的字符串位置。例如,计算窗口内字符串的哈希值,如计算字符串“abcd”的哈希值为h1,计算字符串“bcde”的哈希值为h2,计算字符串“cdef”的哈希值为h3等,以此类推。同时也会计算当前处理字节为首字节的字符串的哈希值,例如,如图4所示,当前处理字节为从“a”开始的字符串“abcd”,计算“abcd”的哈希值为h1,计算字符串“bcde”的哈希值为h2,计算字符串“cdef”的哈希值为h3等,通过哈希值匹配,对匹配成功哈希值对应的字符串使用三元组进行编码。
进一步对delta压缩方式并通过LZ77进行编码进行举例说明。请参阅图5所示,本示例中与图4对应的示例的区别在于:并不是在目标数据块自身搜索匹配的字符串,而是在参考数据块中去寻找与目标数据块匹配的字符串。例如,参考数据块为“abcdefhg”,目标数据块中的字符串为“kabcdef”。目标数据块中的字符串“kabcdef”中字符串“abcdef”与参考数据块中的“abcdef”匹配。需要说明的是,在计算三元组的偏移时,目标数据块中的首字符作为参考数据块中的末尾字符的下一个字符。可以将目标数据块中的字符串“abcdef”替换成(C,9,6)这样的三元组信息,使用三元组信息对数据进行编码,从而实现数据压缩。可选的,与图4对应的示例类似,可以通过哈希值的匹配,来确定匹配的字符串,及匹配的字符串位置。对匹配成功哈希值对应的字符串使用三元组进行编码。需要说明的是,本申请实施例中对于窗口的大小为举例说明,窗口的大小在实际应用中可以按照需求设置。
需要说明的是,本申请中所述的“匹配的字符串”,可以理解为“相同的字符串”,匹配字符串即寻找相同的字符串。本申请中所述的“匹配成功的哈希值”,可以理解为“相同的哈希值”,匹配哈希值即可以理解为寻找相同的哈希值。
本申请中,对于数据压缩包括两个阶段。第一个阶段:实时压缩阶段,对接收到的数据进行实时压缩,将实时压缩后的数据写入到持久化的存储器。第二个阶段:后台数据缩减阶段,从持久化的存储器获取第一阶段已经压缩的数据,对已压缩的数据进行再次缩减。
在第一种可能的实现方式中,在第一个阶段,在线实时压缩的方法可以为:自压缩方式并通过LZ77进行编码,对数据进行实时压缩。在第二个阶段,后台非实时压缩(也称为离线非实时压缩)的方法可以为:delta压缩方式并通过LZ77进行编码,对已经压缩的数据再次压缩。
在第二种可能的实现方式中,在第一个阶段,在线实时压缩的方法可以为:delta压缩方式并通过LZ77进行编码,对数据进行实时压缩。在第二个阶段,后台非实时压缩的方法可以为:delta压缩方式并通过LZ77进行编码,对已经压缩的数据再次压缩。
上述第一种可能的实现方式和第二种可能的实现方式,均是在线实时压缩和后台非实时压缩所采用的压缩方式不同,采用两种不同的压缩方式从而提高压缩性能。
当然,第一阶段和第二阶段也可能采用相同的压缩方式,如第一阶段和第二阶段均采用delta压缩方式并通过LZ77进行编码,两个阶段可能采用的参考数据块不同,在一阶段采用第一参考数据,而第二阶段采用第二参考数据。第二参考数据相对于第一参考数据与目标数据更为相似,从而提高压性能。
需要说明的是,上述三种方式中,对于第一阶段和第二阶段采用何种压缩方式,本申请并不限定。本申请主要针对第二个阶段进行说明。
本申请中,在第二阶段直接对在第一阶段已经压缩的数据进行再次压缩,而不需要对第一阶段已压缩的数据进行解压,恢复到原数据之后,再对原数据进行压缩。本申请实施例中,服务器从持久化的存储器获取经过第一阶段压缩后的第一目标数据块;由于第一目标数据块可能在实时数据压缩阶段已经被压缩,第一目标数据块中包含已编码的第一编码块,那么可以在第二阶段对第一目标数据块进行压缩时,直接复用该第一编码块。也就是说,在第二阶段,不需要对已经编码的部分进行编码,直接复用第一编码块,从而节省字符串匹配的开销。然后仅对第一目标数据块中未编码的第一字符串进行编码以得到第二编码块,并通过复用第一编码块,得到第二目标数据块。第二目标数据块至少包括第一编码块和第二编码块。第二目标数据块为对第一目标数据块再次压缩的数据。进一步输出第二目标数据块至持久化的存储器进行存储。本申请实施例中,在非实时压缩阶段,服务器复用第一目标数据块中已编码的第一编码块,仅对第一目标数据块中未编码的第一字符串进行编码,即节省了解压流程的系统开销,又节省匹配字符串的计算开销。
本申请提供了一种数据压缩方法的一个实施例,本申请实施例中该方法的执行主体以服务器为例进行说明。请参阅图6所示,一种数据压缩方法的一个实施例包括:
步骤601、获取第一目标数据块,第一目标数据块中包括已经过编码的第一编码块。
从持久化的存储器获取第一目标数据块,该第一目标数据块为已压缩的数据块,第一目标数据块中包括已经按照LZ77编码方法进行编码的第一编码块。例如,第一目标数据块包括如下字符串,该字符串为“ghi1ughi(C,9,6)”,其中,(C,9,6)为在第一个阶段(实时压缩阶段)已经编码的第一编码块。
步骤602、对第一目标数据块中未经过编码的第一字符串进行编码以得到第二编码块,并复用第一编码块以得到第二目标数据块,第二目标数据块至少包括第一编码块和第二编码块。
例如,在第一目标数据中未编码的第一字符串为“ghi1u123ghil”,对该第一字符串按照第一压缩方式(如自压缩方式)或者第二压缩方式(如delta压缩方式)通过LZ77编码方法进行编码,以得到第二编码块,并且复用第一编码块以得到第二目标数据块,该第二目标数据块为对第一目标数据块再次压缩的数据块。
需要说明的是,本步骤中,对于第一字符串进行编码采用与第一阶段实时压缩是采用的编码方法(如LZ77编码方法)相同,以复用第一目标数据块中所包含的第一编码块。至于采用哪种压缩方式并不限定。
本实施例中,以自压缩的压缩方式为例。第一字符串为“ghi1u123ghil”,对该第一字符串采用自压缩方式LZ77编码方法进行编码,当前位置的字符串“ghil”与窗内的“ghi1”匹配,则对第二个字符串使用三元组“ghi1”进行编码,该三元组为(C,8,4),则该第二目标数据块为“ghi1u123(C,8,4)(C,9,6)”。
可选的,若该第一字符串中的子串具有对应的哈希值,则通过匹配子串的哈希值确定第一字符串中的匹配串,进而对匹配串进行编码。
例如,在第一阶段对第一目标数据块进行压缩的过程中,已经计算了第一目标数据块中的哈希值,即该第一字符串中的子串具有对应的哈希值,根据各子串的哈希值已经创建了哈希表,则对第一目标数据块进行再次数据缩减的过程中,可以直接复用该哈希值,而不需要计算第一字符串中各子串的哈希值。例如,窗内的子串“ghi1”的哈希值为h1,查找哈希表,在哈希表中有相匹配的哈希值h1,则表明找到了“ghi1”相匹配的匹配串,可以通过查找到的哈希值的位置,确定匹配串的位置,输出三元组信息,该三元组为(C,8,4),该第二目标数据块为“ghi1u123(C,8,4)(C,9,6)”。本示例中,若第一目标数据块中的子串具有对应的哈希值,则在匹配字符串的过程中可以直接复用该哈希值,不需要对第一字符串中的子串计算哈希值,从而节省由于计算哈希值而产生的开销。
步骤603、输出第二目标数据块。
将第二目标数据块写入持久化的存储器。
本实施例中,针对第二阶段,即后台非实时压缩阶段,以自压缩方式LZ77编码方法对获取到的第一目标数据块直接进行数据缩减,在对第二目标数据块的压缩过程中,直接复用第一目标数据块中已经包含的第一编码块,节省了匹配字符串的开销。
本申请提供了一种数据压缩方法的另一个实施例,本实施例与图6对应的实施例的区别在于:图6对应的实施例是通过自压缩方式LZ77编码方法对第一目标数据块进行数据缩减。而本实施例中,通过delta压缩方式LZ77编码对第一目标数据块进行数据缩减,第一目标数据块在第一阶段已经通过自压缩方式LZ77编码进行了一次数据压缩。
在介绍本实施例之前,首先对本实施例的总体架构及方法流程进行说明。请参阅图7所示;a、首先通过相似数据检索模块检索出相似的数据块,该相似数据块包括第一目标数据块和参考数据块。
b、索引模块为逻辑映射单元,将数据与逻辑地址进行映射,索引模块根据数据与地址的映射,从持久化的存储器检索到已压缩的第一目标数据块和已压缩的参考数据块。
c、数据缩减模块从持久化的存储器获取该第一目标数据块和已压缩的参考数据块。
d、数据缩减模块根据参考数据块对第一目标数据块进行delta压缩并编码,得到第二目标数据块,将第二目标数据块写入持久化的存储器。
e、数据缩减模块将第二目标数据块的地址发送至索引模块。
上述相似数据检索模块,索引模块,数据缩减模块所执行的功能可以集成设置,也可以分开设置,上述三个模块所执行的功能可以由服务器执行,或者也可以由服务器中的处理器,芯片或芯片系统执行。请参阅图8所示,上述框架中数据检索模块,索引模块,数据缩减模块所执行的方法,该方法可以具体可以包括如下步骤:
步骤801、检索第一目标数据块的相似数据块,第一目标数据块的相似数据块为参考数据块。
相似数据检索模块中存储有机会表,该机会表中包括多个数据块的指纹信息。若第一目标数据块具有对应的第一指纹信息,查询该机会表,将第一指纹信息与机会表中的多个指纹信息匹配。若第一指纹信息与多个指纹信息中的第二指纹信息匹配,则第一目标数据块与第二指纹信息对应的参考数据块为相似数据块。指纹是指根据一定的哈希算法对数据块计算的哈希值。
进一步的,第一目标数据块中包括多个目标子块;参考数据块包括多个参考子块。第一指纹信息包括多个第一指纹,多个第一指纹对应第一目标数据块中的多个目标子块;第二指纹信息包括多个第二指纹,多个第二指纹对应参考数据块中的多个参考子块。
将多个第一指纹与多个第二指纹相匹配;若多个第一指纹中与多个第二指纹相匹配的目标指纹的数量大于阈值,则判定第一指纹信息与第二指纹信息相匹配。如,阈值为7,第一目标数据块中包括10个目标子块,参考数据块中包括10个参考子块。分别匹配目标子块的第一指纹和参考子块的第二指纹,若有8个第一指纹和8个第二指纹匹配,相匹配的数据子块数量大于阈值(如7),则表明第一目标数据块与参考数据块为相似数据块。
通常情况下在实际应用中,目标数据块为参考数据块的修改版本。例如,参考数据块为一个文档,在该文档的基础上增加了内容(或删减了内容等),增加了内容的版本为目标数据块。该参考数据块和目标数据块为相似数据块。
需要说明的是,本步骤中,通过机会表中存储的数据块的指纹信息,可以检索到与第一目标数据块的相似数据块(即参考数据块),并且可以根据每个目标子块的第一指纹和参考子块的第二指纹确认多个目标子块中哪个目标子块与参考子块匹配。例如,目标子块A与参考子块a匹配,目标子块B与参考子块b匹配等等。本步骤中既确定了哪两个数据块为相似的数据块,又可以确定出这两个数据块中有哪些子块匹配,可以理解的是,基于目标子块和参考子块的指纹,已经对第一目标数据块中的字符串和参考数据块中的字符串进行了一次匹配。
步骤802、获取第一目标数据块及参考数据块。
机会表中的第一目标数据块的第一指纹信息可以作为第一目标数据块的地址索引,参考数据块的第二指纹信息可以作为参考数据块的地址索引。可以根据第一指纹信息和第二指纹信息从持久化的存储器读取第一目标数据块和参考数据块。
例如,第一目标数据块为自压缩后的数据块,参考数据块为自压缩后的数据块。
该第一目标数据块为“abcdefghigk(C,20,5)”,参考数据块为“1bcdeghig(C,20,5)”。该参考数据块中可能包含编码块,也可能不包含编码块。例如,通过自压缩后,参考数据块并没有在自身找到匹配串。或者,该参考数据块为文件数据的部分数据,在该数据块内没有找到匹配串。同理,第一目标数据块中可能存在自压缩的编码块(如(C,20,5)),也可能不包含自压缩的编码块,本实施例中,该第一目标数据块和参考数据块以包含编码块为例进行说明。
需要说明的是,若参考数据块中包含编码块(如(C,20,5)),在LZ77编码的过程中,确定三元组中的偏移时,需要包含编码块的3个字节,避免在解码时,字符串对应的位置错位。
步骤803、基于参考数据块中的第二字符串对第一目标数据块中未经过编码的第一字符串中匹配成功的第一子串进行编码以得到第二编码块,并复用第一编码块以得到第二目标数据块,第二目标数据块至少包括第一编码块和第二编码块。
将第一字符串和第二字符串进行匹配。例如,滑动窗口在第二字符串上滑动,将第一目标数据块中当前位置的字符串与窗口内的字符串匹配。例如,参考数据块包含“1bcdeghig(C,20,5)”。第一目标数据块包含“abcdefghigk(C,20,5)”,第一目标数据块中的第一子串“bcde”与参考数据块中的第二子串“bcde”匹配。同理,第一目标数据块中的第一子串“ghig”与参考数据块中的第二子串“ghig”匹配。进一步对第一子符串中已经匹配成功的第一子串进行编码以得到第二编码块。例如,第一目标数据块中的“bcde”距离参考数据块中的“bcde”的偏移为11,匹配的长度是4,对第一目标数据块中已经匹配成功的第一子串进行三元组编码,该三元组信息为(C,11,4)。同理,第一目标数据块中的“ghig”距离参考数据块中的“ghig”的偏移为12,匹配的长度是4,对第一目标数据块中已经匹配成功的第一子串进行三元组编码,该三元组信息为(C,12,4)。三元组信息为第二编码块,并且直接复用第一目标数据块中的第一编码块。进行数据缩减后的第二目标数据块为“a(C,11,4)f(C,12,4)k(C,20,5)”。
可选的,还可以通过字符串对应的哈希值来确定第一目标数据块和参考数据块中匹配的字符串,及匹配字符串的位置。通过哈希值可以提高匹配的速度。计算第一字符串中第一子串对应的第一哈希值,该第一子串对应的字节数可以为滑动窗口所包含的字节数(滑动窗口的大小为4个字节)。该第一子串并不特指某一个子串,而是对任意4个连续字节计算的哈希值。如上述例子,第一目标数据块包含“abcdefghigk”,其中,“abcd”的哈希值为h1,“bcde”的哈希值为h2,“cdef”的哈希值为h3等,以此类推。即该第一子串可以为任意一个子串,也可以包括多个子串。需要说明的是,此处滑动窗口的大小,计算哈希值的连续字节数均是举例说明,并不造成对本申请的限定。
针对参考数据块,该第二字符串中的第二子串可能具有对应的第二哈希值,也可能不具有对应的哈希值。如果第二字符串中的第二子串具有对应的第二哈希值,表明该参考数据块在第一阶段(即在线实时压缩阶段)通过自压缩方式编码过程中,第二字符串具有对应的编码块,也就是说,在第一阶段,自压缩寻找匹配串的过程中已经计算过哈希值,并已创建哈希表。在这种情况下,直接复用该第二子串的第二哈希值即可,不需要重复计算第二子串的第二哈希值,可以减少由于计算第二哈希值带来的开销。如果第二字符串中的第二子串不具有对应的哈希值,表明该参考数据块在第一阶段通过自压缩方式编码过程中,第二字符串没有找到匹配的字符串,并没有创建对应的哈希表。需要说明的是,该第二子串并不特指某一个子串,而是随着滑动窗口的滑动对任意4个连续字节计算的哈希值。如上述例子,参考数据块包含“1bcdeghig”,其中,“1bcd”的哈希值为h11,“bcde”的哈希值为h2,“cdeg”的哈希值为h13等,以此类推。即该第一子串可以为任意一个子串,也可以包括多个子串。
如果第二字符串中第二子串具有对应的第二哈希值,可以直接复用该第二哈希值。然后将将第一哈希值与第二哈希值匹配。
当第一哈希值与第二哈希值匹配时,对第一字符串中第一子串进行编码以得到第二编码块。例如,参考数据块中的第二子串“bcde”的第二哈希值(如h2)与第一目标参考块中的第一子串“bcde”的第一哈希值(如h2)匹配,则对第一子串进行三元组编码,得到第二编码块。
可选的,还可能出现一种情况,在参考数据块中有部分子串具有对应的哈希值,而部分子串没有对应的哈希值。例如,第二字符串包括第二子串和第三子串,第二子串具有对应的哈希值,而第三子串没有对应的哈希值。可以理解的是,在第一阶段,参考数据块在自压缩的过程中,第二子串具有对应的匹配串,计算过哈希值,并创建了哈希表。而第三子串没有对应的匹配串,没有创建哈希表。针对这种情况,不需要计算第二子串的哈希值,可以直接复用第二子串的哈希值。只需要计算第三子串的第三哈希值即可,然后更新哈希表,更新后的哈希表至少包括该第二哈希值和第三哈希值。例如,该参考数据块包括“1bcdeghig”,其中,第二子串“bcde”具有对应的第二哈希值(如h2)。第三子串“1bcd”没有对应的哈希值,经过哈希值计算,该第三子串“1bcd”的第三哈希值为h5,然后更新哈希表,更新后的哈希表包括第二哈希值和第三哈希值。进一步的将第一哈希值与哈希值表中的第二哈希值和第三哈希值匹配。若第一哈希值与哈希表中的第二哈希值匹配,则对第一字符串中第一子串进行编码以得到第二编码块。需要说明的是,本示例中,该第三子串也并非指某一个特定的子串,可以为一个子串,也可以包括多个子串。本示例中,若第二字符串中仅有部分子串具有哈希值,而另一部分子串可能不具有哈希值,这种情况下,不需要计算第二子串的哈希值,可以直接复用第二子串的哈希值。只需要计算第三子串的第三哈希值即可,以节省计算哈希值的开销。
步骤804、输出第二目标数据块。
向持久化的存储器写入该第二目标数据块,该第二目标数据块为对已压缩的第一目标数据块再次压缩的数据块。更新第二目标数据块的存储地址。
本实施例中,在离线数据缩减阶段以通过delta压缩方式LZ77编码对已压缩的第一目标数据块进行数据缩减。离线数据缩减阶段节省了解压流程,从而节省资源开销。并且通过复用第一目标数据块中已经编码的编码块来节省匹配字符串的开销。在与参考数据块进行匹配的过程中,可以复用参考数据块在第一阶段已经计算的哈希值,不需要重复计算参考数据块中子串的哈希值,从而节省计算哈希值的计算开销,降低离线数据缩减过程进行delta压缩时的计算量,降低离线数据缩减对系统性能的影响。
在一个可能的实现方式中,在步骤803中,还可以对参考数据块中的第二子串和第一目标数据块中的第一子串进行粒度分级匹配。该粒度分级匹配是指:首先可以匹配第一目标数据块和参考数据块中大粒度的子串,再对剩余的较小粒度的子串进行匹配,从而减少计算开销。
第一目标数据块包括目标子块,目标子块具有对应的第一指纹,该目标子块可以理解为第一目标数据块中的子串;参考数据块包括参考子块,参考子块具有对应的第二指纹,该参考子块可以理解为参考数据块中的子串。需要说明的是,在步骤801中,检索相似的数据块的过程中,可以根据每个目标子块的第一指纹和参考子块的第二指纹确认多个目标子块中哪个目标子块与哪个参考子块匹配。例如,目标子块F与参考子块f匹配,目标子块G与参考子块g匹配等等。为了方便说明,以目标子块F与参考子块f匹配为例进行说明。在此过程中,已经完成了对大粒度子串的匹配,则不需要对已经匹配的子串进行重复计算,节省计算开销,仅需要对第一目标数据块中剩下的小粒度的子串进行匹配。本示例中,该第一字符串可以理解为第一目标数据块中还未匹配的任意一个小粒度的子串,该第二字符串可以理解为参考数据块中还未匹配的任意一个小粒度的子串。
若目标子块F的第一指纹和参考子块f的第二指纹匹配,目标子块F和参考子块f为匹配字符串。例如,第一目标数据块为“abcde12345”,第一目标数据块中的一个目标子块F为“abcde”。参考数据块为“abcde22345”,参考数据块中的一个参考子块f为“abcde”。既然在步骤801中就已经可以确定目标子块F和参考子块f是匹配数据块(或者在已经确定目标子块F和参考子块f是匹配数据块的情况下),那么在参考数据块和第一目标数据块匹配的过程中不需要将滑动窗口一个字节一个字节向后处理(即滑动窗口的跨度为1个字节),而是可以适当增加滑动窗口的滑动跨度,从而节省字符匹配的计算量及哈希值的计算量。可以理解的是,在已经确定第一目标数据块中的目标子块F和参考数据块中的参考子块f是匹配数据块的情况下,可以跨过已经匹配成功的子串,匹配剩余的小粒度的子串。例如,若参考数据块的当前滑动窗口内的子串为“abcd”,可以直接向后滑动4个位置,下一个时间单元滑动窗口内的子串为“e223”,在此种情况下,仅需要确定参考数据块中的“e223”是否与第一目标数据串中的“e223”匹配即可。可选的,针对参考数据块,仅需要计算子串“e123”的哈希值,而不需要像传统方法那样一个字节一个字节的计算子串的哈希值,即不需要重复计算“abcd”的哈希值,“bcde”的哈希值和“cde1”的哈希值。同理,针对第一目标数据块,也不需要重复计算已经匹配的目标子块所对应的哈希值,从而节省计算哈希值的开销,降低计算复杂度及时间复杂度。
通过上述说明,增加滑动窗口的跨度包括两种情况:第一种情况,第一目标数据块中待匹配的第一字符串首个字符与目标子块的末尾字符相邻,参考数据块中的第二字符串的首个字符与参考子块的末尾字符相邻。请参阅图9A所示,参考子块为“abcde”,窗口的起始位置滑动到参考子块的末尾字符的下一个字符,则第二字符串的首个字符为“2”。此时,仅需要计算第二字符串中的子串“2234”的哈希值h4,子串“2345”的哈希值h5,不需要重复计算参考子块f对应的哈希值。同理,计算第一字符串中的子串“1234”的哈希值h6,子串“2345”的哈希值h5。通过匹配这两个子串的哈希值寻找匹配串,如该小粒度的匹配串为“2345”。第二种情况,第一字符串的首个字符包含于目标子块,第二子符串的首个字符包含于参考子块。请参阅图9B所示,该窗口的跨度小于参考子块的字节数。例如,该参考子块的字节数为5,该窗口的跨度可以为3个字节或4个字节等。针对参考数据块,如该串口该窗口的起始位置可以位于字符“d”的位置,仅需要计算子串“de22”的哈希值h7,“d223”的哈希值为h8,“2234”的哈希值h4,“2345”的哈希值h5。同理,针对第一目标数据块,计算子串“de12”的哈希值h9,“e123”的哈希值h10,“1234”的哈希值h6,“2345”的哈希值h5,从而匹配小粒度的子串“2345”。对第一字符串的子串“2345”进行三元组编码。本示例中,通过增加滑动窗口的跨度,不需要匹配已经匹配的大粒度的字符串,从而节省计算开销。需要说明的是,本示例中对于目标子块和参考子块所包含的字符串均是为了方便说明而举的例子,并不对本申请造成限定。
可选的,还可以直接增加滑动窗口的跨度先匹配大粒度的字符串。如可以参见图9B进行理解,针对参考数据块对应的滑动窗口的跨度为3个字节,例如,第一个时间单元滑动窗口的起始位置为“a”字符,下一个时间单元将滑动窗口的起始位置滑动到“d”字符(跨度为3字节),此时,滑动窗口内的字符为“de22”。在第一个时间单元对应的滑动窗口计算字符串“abcd”的哈希值(如h11),第二个时间单元对应的滑动窗口计算字符串“de22”的哈希值(如h12),若在第一目标数据块中的子串计算的哈希值也是h11和h12,则可以找到大粒度的匹配字符串,如该大粒度的匹配字符串为“abcde22”。本示例中,不需要一个字节一个字节进行处理,匹配字符串。而是可以增加滑动窗口的跨度,增大匹配的范围,先匹配大粒度的字符串,以节省计算开销。
可选的,在步骤803中,对第一目标数据块中未编码的第一字符串进行编码以得到第二编码块,并复用第一编码块,得到第二目标数据块还可以包括:
对第一目标数据块中未编码的第一字符串进行LZ77编码以得到第二编码块,并复用第一编码块,得到第三目标数据块;然后对第三目标数据块中未编码的字符进行熵编码,得到第二目标数据块。本示例中,可以通过LZ77编码消除了数据块中重复出现的字符串,但还存在字节之间的重复,因此再用熵编码(如哈夫曼编码)再压缩一次。从而提高压缩率,进一步降低数据块的存储量。
以上对一种数据压缩方法进行了详细描述,请参阅图10所示,本申请实施例还提供了一种服务器1000,该服务器包括获取模块1001,处理模块1002和输出模块1003,图10中的服务器是以功能模块的形式来呈现。这里的“模块”可以指特定应用集成电路(application-specific integrated circuit,ASIC),电路,执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。
获取模块1001,用于获取已压缩的第一目标数据块,所述第一目标数据块中包括已经过编码的第一编码块;
处理模块1002,用于对所述获取模块1001获取的所述第一目标数据块中未经过编码的第一字符串进行编码以得到第二编码块,并复用所述第一编码块,得到第二目标数据块,所述第二目标数据块至少包括所述第一编码块和第二编码块;
输出模块1003,用于输出所述处理模块1002得到的所述第二目标数据块。
进一步的,获取模块1001,用于执行图6和图8对应的实施例中的步骤601和步骤802,具体实现请参考图6所示实施例中步骤601和图8所示实施例中的步骤802的具体描述,这里不再赘述。处理模块1002,用于执行图6和图8对应的实施例中的步骤602、步骤801和步骤803,具体实现请参考图6所示实施例中的步骤602和图8对应的实施例中步骤801和步骤803的具体描述,这里不再赘述。输出模块1003,用于执行图6对应的实施例中的步骤603和图8对应的实施例中的步骤804,具体实现请参考图6对应的实施例中的步骤603和图8对应的实施例中的步骤804的具体描述,这里不再赘述。
在一种实现方式中,获取模块1001、处理模块1002和输出模块1003的功能可以通过一个处理装置实现,处理装置的功能可以部分或全部通过软件实现。
可选地,处理装置的功能可以部分或全部通过软件实现。此时,处理装置可以包括存储器和处理器,其中,存储器用于存储计算机程序,处理器读取并执行存储器中存储的计算机程序,以执行任意一个方法实施例中的相应处理和/或步骤。
可选地,处理装置可以仅包括处理器。用于存储计算机程序的存储器位于处理装置之外,处理器通过电路/电线与存储器连接,以读取并执行存储器中存储的计算机程序。
可选地,处理装置的功能可以部分或全部通过硬件实现。
请参阅图11所示,本申请实施例还提供了一种服务器1100,图11是本申请实施例提供的一种服务器结构示意图,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器1122和存储器1132,一个或一个以上存储应用程序1142或数据1144的可读存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和可读存储介质1130可以是短暂存储或持久存储。存储在可读存储介质1130的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,处理器1122可以设置为与可读存储介质1130通信,在服务器1100上执行可读存储介质1130中的一系列指令操作。
服务器1100还可以包括一个或一个以上电源1126,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1158,和/或,一个或一个以上操作系统1141。
本申请实施例中,所述处理器用于读取所述至少一个存储器所存储的计算机程序,使得所述服务器执行图6和图8对应的实施例中服务器所执行的方法步骤,具体请参阅方法实施例中的描述,此处不赘述。
可以理解,本申请实施例中的处理器可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、数字信号处理器(digitalsignal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field programmable gate array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请所描述的方案可通过各种方式来实现。例如,这些技术可以用硬件、软件或者硬件结合的方式来实现。对于硬件实现,用于在通信装置(例如,基站,终端、网络实体、或芯片)处执行这些技术的处理单元,可以实现在一个或多个通用处理器、DSP、数字信号处理器件、ASIC、可编程逻辑器件、FPGA、或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合中。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。
可以理解,本申请实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(directrambus RAM,DR RAM)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本申请还提供了一种计算机可读介质,其上存储有计算机程序,该计算机程序被计算机执行时实现上述任一方法实施例的功能。
本申请还提供了一种计算机程序产品,该计算机程序产品被计算机执行时实现上述任一方法实施例的功能。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,高密度数字视频光盘(digital video disc,DVD))、或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
可以理解,在本申请中,“当…时”、“若”以及“如果”均指在某种客观情况下装置会做出相应的处理,并非是限定时间,且也不要求装置实现时一定要有判断的动作,也不意味着存在其它限定。
本申请中的“同时”可以理解为在相同的时间点,也可以理解为在一段时间段内,还可以理解为在同一个周期内。
本领域技术人员可以理解:本申请中涉及的第一、第二等各种数字编号仅为描述方便进行的区分,并不用来限制本申请实施例的范围。本申请中的编号(也可被称为索引)的具体取值、数量的具体取值、以及位置仅作为示意的目的,并不是唯一的表示形式,也并不用来限制本申请实施例的范围。本申请中涉及的第一个、第二个等各种数字编号也仅为描述方便进行的区分,并不用来限制本申请实施例的范围。
本申请中对于使用单数表示的元素旨在用于表示“一个或多个”,而并非表示“一个且仅一个”,除非有特别说明。本申请中,在没有特别说明的情况下,“至少一个”旨在用于表示“一个或者多个”,“多个”旨在用于表示“两个或两个以上”。
可以理解,在本申请各实施例中,“与A相应的B”表示B与A相关联,根据A可以确定B。但还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。
其中,上述任一处提到的处理器,可以是一个通用中央处理器(CPU),微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制上述第一方面无线通信方法的程序执行的集成电路。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (13)
1.一种数据压缩方法,其特征在于,包括:
获取已压缩的第一目标数据块,所述第一目标数据块中包括已经过编码的第一编码块;
对所述第一目标数据块中未经过编码的第一字符串进行编码以得到第二编码块,并复用所述第一编码块,得到第二目标数据块,所述第二目标数据块至少包括所述第一编码块和第二编码块;
输出所述第二目标数据块。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取参考数据块,所述参考数据块包括第二字符串;
所述对所述目标数据块中未经过编码的第一字符串进行编码以得到第二编码块,包括:
将所述第一字符串和所述第二字符串进行匹配;
对所述第一字符串中匹配成功成功的第一子串进行编码以得到第二编码块。
3.根据权利要求2所述的方法,其特征在于,所述将所述第一字符串和所述第二字符串进行匹配,包括:
计算所述第一字符串中第一子串对应的第一哈希值;
若所述第二字符串中第二子串具有对应的第二哈希值;
将所述第一哈希值与所述第二哈希值匹配;
当所述第一哈希值与所述第二哈希值匹配时,所述对所述第一字符串中匹配成功的第一子串进行编码以得到第二编码块,包括:
对所述第一哈希值所对应的第一子串进行编码以得到所述第二编码块。
4.根据权利要求3所述的方法,其特征在于,所述第二字符串还包括第三子串,所述第三子串无对应的哈希值,所述方法还包括:
计算所述第三子串的第三哈希值以得到哈希值表,所述哈希值表至少包括所述第三哈希值和所述第二哈希值;
所述将所述第一哈希值与所述第二哈希值匹配,包括:
将所述第一哈希值与所述哈希值表中的所述第二哈希值和所述第三哈希值匹配。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述对所述第一目标数据块中未经过编码的第一字符串进行编码以得到第二编码块,包括:
对所述第一目标数据块中未经过编码的第一字符串采用第一编码方式进行编码以得到第二编码块;所述第一目标数据块中包括已经过所述第一编码方式进行编码的第一编码块。
6.一种服务器,其特征在于,包括:
获取模块,用于获取已压缩的第一目标数据块,所述第一目标数据块中包括已经过编码的第一编码块;
处理模块,用于对所述获取模块获取的所述第一目标数据块中未经过编码的第一字符串进行编码以得到第二编码块,并复用所述第一编码块,得到第二目标数据块,所述第二目标数据块至少包括所述第一编码块和第二编码块;
输出模块,用于输出所述处理模块得到的所述第二目标数据块。
7.根据权利要求6所述的服务器,其特征在于,
所述获取模块,还用于获取参考数据块,所述参考数据块包括第二字符串;
所述处理模块,还用于将所述第一字符串和所述第二字符串进行匹配;对所述第一字符串中匹配成功的第一子串进行编码以得到第二编码块。
8.根据权利要求7所述的服务器,其特征在于,所述处理模块还用于:
计算所述第一字符串中第一子串对应的第一哈希值;
若所述第二字符串中第二子串具有对应的第二哈希值;
将所述第一哈希值与所述第二哈希值匹配;
当所述第一哈希值与所述第二哈希值匹配时,对所述第一哈希值所对应的第一子串进行编码以得到所述第二编码块。
9.根据权利要求8所述的服务器,其特征在于,所述第二字符串还包括第三子串,所述第三子串无对应的哈希值;所述处理模块还用于:
计算所述第三子串的第三哈希值以得到哈希值表,所述哈希值表至少包括所述第三哈希值和所述第二哈希值;
将所述第一哈希值与所述哈希值表中的所述第二哈希值和所述第三哈希值匹配。
10.根据权利要求6-9中任一项所述的服务器,其特征在于,
所述处理模块,还用于对所述第一目标数据块中未经过编码的第一字符串采用第一编码方式进行编码以得到第二编码块;所述第一目标数据块中包括已经过第一编码方式进行编码的第一编码块。
11.一种服务器,其特征在于,包括处理器,所述处理器与至少一个存储器耦合,所述处理器用于读取所述至少一个存储器所存储的计算机程序,使得所述服务器执行如权利要求1至5中任一项所述的方法。
12.一种计算机可读介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至5中任一项所述的方法。
13.一种芯片,其特征在于,包括处理器和通信接口,所述处理器用于读取指令以执行权利要求1至5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010500225.9A CN113765854B (zh) | 2020-06-04 | 2020-06-04 | 一种数据压缩方法及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010500225.9A CN113765854B (zh) | 2020-06-04 | 2020-06-04 | 一种数据压缩方法及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113765854A true CN113765854A (zh) | 2021-12-07 |
CN113765854B CN113765854B (zh) | 2023-06-30 |
Family
ID=78783698
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010500225.9A Active CN113765854B (zh) | 2020-06-04 | 2020-06-04 | 一种数据压缩方法及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113765854B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020097172A1 (en) * | 1998-12-11 | 2002-07-25 | Fallon James J. | Content independent data compression method and system |
CN105426413A (zh) * | 2015-10-31 | 2016-03-23 | 华为技术有限公司 | 一种编码方法及装置 |
WO2018058604A1 (zh) * | 2016-09-30 | 2018-04-05 | 华为技术有限公司 | 数据压缩方法、设备与计算设备 |
CN108322220A (zh) * | 2018-02-08 | 2018-07-24 | 华为技术有限公司 | 编解码方法、装置及编解码设备 |
CN108880556A (zh) * | 2018-05-30 | 2018-11-23 | 中国人民解放军战略支援部队信息工程大学 | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 |
-
2020
- 2020-06-04 CN CN202010500225.9A patent/CN113765854B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020097172A1 (en) * | 1998-12-11 | 2002-07-25 | Fallon James J. | Content independent data compression method and system |
CN105426413A (zh) * | 2015-10-31 | 2016-03-23 | 华为技术有限公司 | 一种编码方法及装置 |
WO2018058604A1 (zh) * | 2016-09-30 | 2018-04-05 | 华为技术有限公司 | 数据压缩方法、设备与计算设备 |
CN108322220A (zh) * | 2018-02-08 | 2018-07-24 | 华为技术有限公司 | 编解码方法、装置及编解码设备 |
CN108880556A (zh) * | 2018-05-30 | 2018-11-23 | 中国人民解放军战略支援部队信息工程大学 | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 |
Also Published As
Publication number | Publication date |
---|---|
CN113765854B (zh) | 2023-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9390099B1 (en) | Method and apparatus for improving a compression ratio of multiple documents by using templates | |
US7538695B2 (en) | System and method for deflate processing within a compression engine | |
US11463102B2 (en) | Data compression method, data decompression method, and related apparatus, electronic device, and system | |
AU2016200550B2 (en) | Encoding program, decompression program, compression method, decompression method, compression device and decompression device | |
US7924183B2 (en) | Method and system for reducing required storage during decompression of a compressed file | |
CN107682016B (zh) | 一种数据压缩方法、数据解压方法及相关系统 | |
US8924591B2 (en) | Method and device for data segmentation in data compression | |
US9479194B2 (en) | Data compression apparatus and data decompression apparatus | |
US9059731B2 (en) | Boosting decompression in the presence of reoccurring Huffman trees | |
CN110419036B (zh) | 数据压缩方法、设备与计算设备 | |
CN114337678A (zh) | 数据压缩方法、装置、设备及存储介质 | |
CN112544038A (zh) | 存储系统数据压缩的方法、装置、设备及可读存储介质 | |
EP4154406A1 (en) | Compression/decompression using index correlating uncompressed/compressed content | |
CN112380196B (zh) | 一种用于数据压缩传输的服务器 | |
WO2005112270A1 (en) | Method and apparatus for structured block-wise compressing and decompressing of xml data | |
WO2021034749A1 (en) | Decompression engine for decompressing compressed input data that includes multiple streams of data | |
CN113765854B (zh) | 一种数据压缩方法及服务器 | |
CN116707532A (zh) | 一种压缩文本的解压方法、装置、存储介质及电子设备 | |
US10496703B2 (en) | Techniques for random operations on compressed data | |
CN114282141A (zh) | 压缩格式数据的处理方法、装置、电子设备及可读存储介质 | |
EP2779467B1 (en) | Staged data compression, including block-level long-range compression, for data streams in a communications system | |
KR20200121760A (ko) | 인코딩된 데이터에 대한 조건부 트랜스코딩 | |
KR101705461B1 (ko) | 문자열 압축 및 해제를 위한 방법 및 장치 | |
US11748307B2 (en) | Selective data compression based on data similarity | |
US11422975B2 (en) | Compressing data using deduplication-like methods |
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 |