发明内容
基于此,有必要针对现有技术中的数据压缩方法或者系统的数据压缩率以及数据压缩性能有限的问题,提供一种用于数据压缩传输的服务器。
为解决上述问题,本发明采取如下的技术方案:
一种用于数据压缩传输的服务器,包括接收模块、数据块分割模块、数据冗余搜索模块、数据压缩及解压模块、存储模块、数据提取模块和发送模块;
一、数据压缩存储过程如下:
所述接收模块用于接收第一终端发送的原文件,并将所述原文件发送至数据块分割模块;
所述数据块分割模块利用数据分块算法对所述原文件进行数据块分割,得到一组数据分块,并将一组数据分块以数据流的方式输出至所述数据冗余搜索模块;
所述数据冗余搜索模块对所述数据流进行冗余数据搜索处理后输出新增的唯一数据块流至所述数据压缩及解压模块;
所述数据压缩及解压模块利用压缩编码算法对新增的唯一数据块流进行压缩编码后存储至所述存储模块中;
其中,所述数据冗余搜索模块包括流缓冲单元、哈希单元、哈希链接列表管理单元、引擎预处理单元、匹配引擎单元、输出单元和历史缓冲单元;
所述流缓冲单元用于接收所述数据块分割模块输出的所述数据流,并读取从输入数据流位置开始的数据字符串;
所述哈希单元维护一个哈希地址列表,所述哈希地址列表用于存储与输入数据流位置对应的指向数据字符串的数据流地址,同时,所述哈希单元对于所述流缓冲单元访问的每个输入字节和其后若干个字节相对应的前缀进行散列,以生成哈希索引并将所述哈希索引发送至所述哈希链接列表管理单元中;
所述哈希链接列表管理单元对所述哈希索引进行管理和存储;
所述引擎预处理单元从所述哈希单元获取当前数据字符串对应的当前数据流地址以及所述哈希地址列表中的历史地址,并将所述当前数据流地址和所述历史地址提供给所述匹配引擎单元,当所述哈希地址列表存储的地址数目大于所述哈希单元可以存储的最大阈值地址数目时,由所述哈希链接列表管理单元根据所述哈希索引向所述匹配引擎单元提供除所述哈希地址列表外的其余的历史地址;
所述匹配引擎单元根据所述当前数据流地址从所述流缓冲单元读取对应的数据字符串,并根据所述历史地址在所述历史缓冲单元中查找与数据字符串匹配的重复数据字符串,得到匹配结果;若所述匹配结果为空,则所述输出单元根据所述匹配引擎单元读取的数据字符串生成新增的唯一数据块流;
所述输出单元用于输出新增的唯一数据块流至所述数据压缩及解压模块;
所述历史缓冲单元用于为所述匹配引擎单元提供查找重复数据字符串时所需的历史数据以及在所述匹配引擎单元每一次查找完成后,接收并存储由所述流缓冲单元发送的数据字符串;
二、数据还原过程如下:
所述接收模块还用于接收第二终端发送的还原文件请求,所述还原文件请求包含待还原文件的元信息;
所述数据提取模块根据所述元信息从所述存储模块中提取出对应的压缩数据块;
所述数据压缩及解压模块对所述压缩数据块进行解压缩,得到解压数据;
所述发送模块将所述解压数据发送至所述第二终端。
与现有技术相比,本发明具有以下有益效果:
本发明所提出的用于数据压缩传输的服务器首先采用数据冗余搜索模块首先对待压缩的数据分块进行冗余数据搜索处理,消除冗余数据块,从而减小数据量,避免了由于对冗余数据的压缩而导致的存储空间浪费以及压缩比率降低,然后再通过数据压缩及解压模块对新增的唯一数据块进行再次压缩,进一步减小数据体积。本发明的服务器采用先去冗后压缩的方式,不仅降低了对服务器的处理性能需求,而且使得数据缩减作用得到叠加,大大降低了数据压缩的消耗时间,从而可以获得更高的数据压缩比率和更优的数据压缩性能。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及较佳实施例对本发明的技术方案进行详细描述,描述过程中所举实施例只用于解释本发明,并非用于限定本发明的范围。
在其中一个实施例中,如图1所示,本发明公开一种用于数据压缩传输的服务器,该服务器具体包括接收模块100、数据块分割模块200、数据冗余搜索模块300、数据压缩及解压模块400、存储模块500、数据提取模块600和发送模块700。
一、数据压缩存储过程如下:
接收模块100用于接收第一终端800(例如计算机)发送的原文件,并将原文件发送至数据块分割模块200,该原文件为第一终端800的待压缩的文件。
数据块分割模块200利用数据分块算法对原文件进行数据块分割,得到一组数据分块,并将一组数据分块以数据流的方式输出至数据冗余搜索模块300;可选地,本实施例中数据块分割模块200所采用的数据分块算法可以为定长分块算法、变长分块算法、滑动块切分算法中的任意一种,其中定长分块算法采用预先义好的块大小对文件进行切分,并进行弱校验值和MD5强校验值;变长分块算法(Content-defined Chunking,CDC)应用数据指纹(如Rabin指纹等)将文件分割成长度大小不等的分块,它与定长分块算法不同,它是基于文件内容进行数据块切分的,因此数据块大小是可变化的;滑动块切分算法(SlidingBlock)则结合了定长分块算法和变长分块算法的优点,它的块大小固定,它对定长数据块先计算弱校验值,如果匹配则再计算MD5强校验值,两者都匹配则认为是一个数据块边界。
数据冗余搜索模块300对数据流进行冗余数据搜索处理后输出新增的唯一数据块流至数据压缩及解压模块400;数据冗余搜索模块300用于对输入的数据流进行冗余数据搜索处理,以判断数据分块是否存在冗余,若判断存在冗余,则无需对该数据分块进行存储,并存储该数据分块的相关数据信息;若判断不存在冗余,则表示该数据分块是新增的唯一数据块,此时数据冗余搜索模块300输出新增的唯一数据分块流至数据压缩及解压模块400,由数据压缩及解压模块400进行再压缩。
数据压缩及解压模块400利用压缩编码算法对新增的唯一数据块流进行压缩编码后得到压缩数据,将压缩数据存储至存储模块500中;可选地,本实施例中数据压缩及解压模块400所采用的压缩编码算法可以为字符串匹配算法或者LZ77算法,其中字符串匹配算法的常见算法有暴力检索(Brute Force,BF)算法、哈希检索(Robin-Karp,RK)算法、KMP算法、Sunday算法等;LZ77算法是一种利用数据的重复结构信息来进行数据压缩的算法,具有唯一可译、无损压缩的性质,可实现数据的高效压缩。
二、数据还原过程如下:
接收模块还100用于接收第二终端900(例如计算机)发送的还原文件请求,该还原文件请求包含了待还原文件的元信息;需要指出的是,本实施例中的第一终端800和第二终端900可以为同一个终端设备,即第一终端800可以发送原文件,也可以发送还原文件请求,类似地,第二终端900可以发送还原文件请求,也可以发送原文件。
数据提取模块600根据元信息从存储模块500中提取出对应的压缩数据块,并提供给数据压缩及解压模块400。
作为一种具体的实施方式,仍参照图1,当数据提取模块600根据元信息从存储模块500中提取压缩数据块失败时,即无法在存储模块500找到还原文件请求对应的压缩数据块,此时数据提取模块600生成提示信息,并将提示信息通过发送模块700发送至第二终端900,在第二终端900进行提示。
在数据提取模块600根据元信息从存储模块500中成功提取出对应的压缩数据块后,数据压缩及解压模块400对压缩数据块进行解压缩,得到解压数据,从而实现原文件的物理还原。
最后,发送模块700将解压数据发送至第二终端900,供第二终端900处理或者调用。
本实施例所提出的用于数据压缩传输的服务器首先采用数据冗余搜索模块首先对待压缩的数据分块进行冗余数据搜索处理,消除冗余数据块,从而减小数据量,避免了由于对冗余数据的压缩而导致的存储空间浪费以及压缩比率降低,然后再通过数据压缩及解压模块对新增的唯一数据块进行再次压缩,进一步减小数据体积。本实施例的服务器采用先去冗后压缩的方式,不仅降低了对服务器的处理性能需求,而且使得数据缩减作用得到叠加,大大降低了数据压缩的消耗时间,从而可以获得更高的数据压缩比率和更优的数据压缩性能。
作为一种具体的实施方式,如图2所示,数据冗余搜索模块300包括流缓冲单元310、哈希单元320、哈希链接列表管理单元330、引擎预处理单元340、匹配引擎单元350、输出单元360和历史缓冲单元370。
具体地,参见图3,流缓冲单元310与数据块分割模块200连接,用于接收数据块分割模块200输出的数据流,并读取从当前的输入数据流位置开始的数据字符串。例如,流缓冲单元310可以被构造成与数据字符串相对应的字节块,流缓冲单元310负责将当前的输入数据流位置递增到要进行压缩的下一个输入数据流位置。为了使流缓冲单元310具有更高的数据吞吐量,流缓冲单元310可以同时访问多个字节,对多个字节进行并行处理。
数据冗余搜索模块300包括哈希单元320,哈希单元320维护一个哈希地址列表,哈希地址列表用于存储与输入数据流位置对应的指向数据字符串的数据流地址,同时,哈希单元320对于流缓冲单元310访问的每个输入字节和其后若干个字节(例如3个字节)相对应的前缀进行散列,以生成哈希索引并将哈希索引发送至哈希链接列表管理单元330中。哈希地址列表提供一个或多个历史地址指向输入数据流中先前的位置,在此之前的3个字节字符串哈希为与哈希索引相同的值。将历史地址和相应的数据流地址提供给匹配引擎单元350,以使匹配引擎单元350执行数据搜索。
数据冗余搜索模块300包括哈希链接列表管理单元330,哈希链接列表管理单元330用于对哈希索引进行管理和存储,在需要时,哈希链接列表管理单元330将向匹配引擎单元350提供所需的历史地址。
数据冗余搜索模块300包括引擎预处理单元340,引擎预处理单元340从哈希单元320获取当前数据字符串对应的当前数据流地址以及哈希地址列表中的历史地址,并将当前数据流地址和历史地址提供给匹配引擎单元350,以使匹配引擎单元350能够根据当前数据流地址和历史地行数据搜索,完成数据的匹配查找;特别地,当哈希地址列表存储的地址数目大于哈希单元320可以存储的最大阈值地址数目时,由哈希链接列表管理单元330根据哈希索引向匹配引擎单元350提供除哈希地址列表外的其余的历史地址。如果哈希单元320支持的搜索深度即哈希地址列表可以存储的地址数据大于给定的哈希地址列表可以存储的地址的数目即最大阈值地址数目,则由哈希链接列表管理单元330提供剩余的历史地址。
可选地,哈希单元320包括至少一个快速存储器,由哈希单元320维护的哈希地址列表可以存储在快速存储器中,该快速存储器可以为具有有限存储空间的高速存储器。
类似地,可选地,哈希链接列表管理单元330也包括至少一个用于存储哈希索引的存储器,该存储器可以为一般的具有较大存储空间的存储器,只有当给定哈希地址列表的历史地址的数目超过哈希单元320的存储深度时,才会访问该存储器的存储空间。
数据冗余搜索模块300包括匹配引擎单元350,匹配引擎单元350根据当前数据流地址从流缓冲单元310读取对应的数据字符串,并根据历史地址在历史缓冲单元370中查找与数据字符串匹配的重复数据字符串,得到匹配结果;若匹配结果为空,表明已压缩的数据中没有数据字符串对应的数据,亦即数据字符串对应的数据块为新增的唯一数据块,此时输出单元360根据匹配引擎单元350读取的数据字符串生成新增的唯一数据块流。先前的数据字符串存储在历史缓冲单元370中,历史缓冲单元370将保持已经经历压缩的先前的输入数据流的历史。
进一步地,当匹配结果不为空时,表明已压缩的数据中已经存在数据字符串对应的数据,读取的数据字符串为重复数据,此时匹配引擎单元350仅将当前数据流地址通过输出单元360输出至数据压缩及解压模块400,数据压缩及解压模块400再将当前数据流地址存储至存储模块500中。
进一步地,匹配引擎单元350的数量设置为多个,多个匹配引擎单元350可以并行查找重复数据字符串,以提高查找速度。
数据冗余搜索模块300包括输出单元360,输出单元360用于输出新增的唯一数据块流至数据压缩及解压模块400;
数据冗余搜索模块300还包括历史缓冲单元370,历史缓冲单元370用于为匹配引擎单元350提供查找重复数据字符串时所需的历史数据以及在匹配引擎单元350每一次查找完成后,接收并存储由流缓冲单元310发送的数据字符串,对数据字符串进行保存,以用于与随后的数据字符串进行比较。
本实施方式提供了一种新的数据冗余搜索模块结构,具体包括流缓冲单元、哈希单元、哈希链接列表管理单元、引擎预处理单元、匹配引擎单元、输出单元和历史缓冲单元,通过数据冗余搜索模块可以实现对输入数据流的冗余数据的搜索,对应冗余数据不进行后续的数据压缩及存储操作,从而有效消除冗余数据,提高数据压缩效率。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。