实施方式的描述仅为示例性描述,并不起限定作用。为描述目的,本发明和权利要求书中引用数字“第一”、“第二”以及“第三”,本领域的普通技术人员应当理解,它们不表示或不是指“特定的第一”、“特定的第二”或“特定的第三”。
根据一些实施方式,此中描述的运算、技术和/或要素可通过电子设备实现,该电子设备可包含一个或多个特殊用途计算设备。这些计算设备之间可以为硬连接以执行此中描述的运算、技术和/或要素;或可包含数字电子设备,例如:一个或多个特定用途集成电路(ASICs)或可现场编程门阵列(FPGAs),它们持续运行以执行此中描述的运算、技术和/或要素;或可包含一个或多个硬件处理器,运行该硬件处理器根据固件、存储器、其他存储件或他们的组合中的程序指令执行本发明的这些特征。这些特殊用途计算设备亦可将定制硬连接逻辑、特定用途集成电路或可现场编程门阵列与定制程序联合来完成本发明的技术和其他特征。特殊用途计算设备可以为台式计算机系统、手提计算机系统、手持设备、网络设备或并入硬连接和/或程序逻辑以实现本发明的技术或其他特征的任何其他设备。
一个或多个特殊用途计算设备通常可被运算系统软件控制或协调,例如因特网操作系统、安卓、黑莓、谷歌操作系统、Windows XP、Windows Vista、Windows 7、Windows 8、Windows服务器、Windows CE、Unix、Linux、SunOS、Solaris、VxWorks或其他兼容操作系统。在其他实施方式中,计算设备可被专用操作系统控制。操作系统控制安排计算机执行过程,执行存储管理,提供文件系统、网络化及I/O/服务,并在其他项中为用户提供界面功能,例如:图形用户界面(GUI)。
图1示出实施方式描述中使用的示例系统100的框图。如图1所示,系统100包含第一计算机系统110、网络130以及第二计算机系统140。第一计算机系统110包含一个或多个处理器112、存储器114、存储设备116以及网络界面118,所有这些部件可通过总线120相互通信,第一计算机系统110可通过网络130与第二计算机系统140交换数据。第二计算机系统140也包含一个或多个处理器142、存储器144、存储设备146以及网络界面148,所有这些部件可通过总线150相互通信。
存储器114和144均可为用于存储分别由处理器112和142执行的信息和指令的随机存取存储器(RAM)或其他非易失性存储设备,存储器114和144还可用来在处理器112和142执行指令时存储临时参数或其他中间信息。在被存储于可访问处理器112和142的非临时性存储媒介(例如存储设备116和146)后,这些指令使计算机系统110和140成为定制执行指令指定运算的特殊用途机器。这些指令可组织成不同软件模块,举例来说,不同软件模块可包含要素(例如软件要素、面向对象的软件要素、分类要素以及任务要素)、过程、功能、域、步骤、子程序、程序代码片段、驱动器、固件、微代码、电路、数据、数据库、数据结构、表、阵列以及变量。
通常,此处引用的“模块”一词是指硬件或固件中包含的逻辑或指软件指令的集合,可能具有入口和出口点,用编程语言如Java、Lua、C或C++编写。软件模块可汇编或链接至可执行程序,安装于动态链接库或编写在如BASIC、Perl或Python解译程序语言中。还应当注意到,软件模块可从其他模块或其自身中随时被调用,和/或可响应于检测到的项目或干扰被调用,用于在计算设备上执行的软件模块可提供在计算机可读媒介上,如压缩盘、数字录像盘、闪存驱动器、磁盘、或任何其他有形媒介,或数字下载件(通常以压缩件或安装格式存储,在执行前需要安装、解压缩或解密);这些软件代码可部分或全部存储在执行计算设备的存储器上,由计算设备执行;软件指令可嵌入固件中,如可擦可编程只读存储器(EPROM)。还应当注意,硬件模块可包括连接的逻辑单元,如选择器开关和触发器,和/或可包括可编程单元,如可编程序门阵列或处理器。此中描述的模块或计算设备功能最优由软件模块实现,但是可由硬件或固件替换。一般来说,虽然为实体组织或存储,此中描述的模块是指可与其他模块结合或可分割为子模块的逻辑模块。
计算机系统110和140可以采用定制硬连接逻辑、一个或多个特定用途集成电路或现场可编程门阵列、结合计算机系统促使或安排计算机系统110和140成为特殊用途机器的固件和/或程序逻辑实现此中描述的技术。根据一些实施方式,此中描述的运算、功能、技术或其他特征由计算机系统110和140并且响应于执行分别包含于存储器114和144中的一个或多个指令的一个或多个序列的处理器112和142执行,这些指令可从其他存储媒介如存储设备116和146中读入存储器114和144,包含于存储器114和144中的指令序列的执行促使处理器112和142执行此中描述的处理步骤。在替换实施方式中,硬连接电路替换为或结合软件指令。
此中使用的术语“非临时性媒介”是指用于存储促使机器以特殊方式运行的数据或指令的任何非临时性媒介,这些非临时性媒介可包括非易失性媒介和/或易失性媒介。举例来说,非易失性媒介可包含动态存储器如存储器114和144,非临时性媒介的通常形式包含例如软盘、软磁盘、硬盘、固态驱动器、磁带或其他任何磁性数据存储媒介、CD-ROM、其他任何光学数据存储媒介、其他任何具有空穴阵列的实体媒介、随机存取存储器、可编程只读存储器、可擦可编程只读存储器、快擦编程只读存储器、其他任何存储芯片或盒式存储器、以及等同网络版。
网络界面118和148可提供联结网络130的双向数据通信,例如,网络界面118和148可以为综合服务数字网络(ISDN)卡、光缆调制解调器、卫星调制解调器或调制解调器以提供与相应类型电话线的数据通信连接;另一个例子,网络界面118和148可以为局域网(LAN)卡,提供与兼容LAN的数据通信连接。在任一这样的实施中,网络界面118和148可发送和接收载有代表各种类型信息的数字数据流的电信号、电磁信号或光信号,并将数据流提供给存储设备116和146,处理器112和142可将数据转换为不同形式(例如通过执行软件指令来压缩或解压缩数据),然后将转换后的数据存储在存储设备中(例如存储设备116和146),以及/或者将转换后的数据通过网络界面118和148在网络130上传输。
图2示出本发明实施方式的示例系统200的框图。在一些实施方式中,系统200如同图1中的系统110一样实现,包含数据压缩模块230、数据解压缩模块250、历史数据管理器270以及探索握手模块290,在通过处理器(例如图1中的处理器112)执行时,数据压缩模块230、数据解压缩模块250、历史数据管理器270以及探索握手模块290中的至少部分可随着系统200压缩或解压缩输入数据流检索和/或更新存储于存储设备160中的历史数据294以及一个或多个表296。虽然图2显示系统200既包含数据压缩模块230又包含数据解压缩模块250,应当理解为,系统200可以只包含数据压缩模块230来压缩数据,而接收系统(例如图1所示的系统140)可以只包含数据解压缩模块250来接收来自系统200的压缩数据,然后将数据解压缩。此外,虽然图2显示历史数据294和表296为两个独立的整体,应当理解为两者均可以为数据结构的一部分。
历史数据294包含最近压缩的数据和/或因解压缩其他数据而最近生成的数据,表296包含便于在历史数据294中查找数据片段的信息。在一些实施方式中,历史数据294包含系统200认为对于特定传输来说是冗余的数据,例如,当系统200接收指示传输数据至接收系统(例如图1所示的系统140)的指令,系统200可能认为待传输数据的至少一部分已经是存储于系统140中的相应历史数据的一部分,因此使数据的这部分成为冗余而不需要传输冗余数据。使用表296中的信息时,系统200在历史数据294中可查找并定位冗余数据,定位冗余数据且知道系统140已经存储相同冗余数据后,系统200向系统140传输表示冗余数据和历史数据294(和/或存储于系统140的相应历史数据)之间关系的信息,这种关系可以为例如存储于系统140的相应历史数据中的冗余数据的位置或大小,这种关系通常可以用比冗余数据本身更少的数据来表示,因此,关系信息的传输,而不是冗余数据,可节省在其上进行传输的媒介(如图1所示的网络130)的带宽。系统200还可压缩上述信息来进一步减少传输数据的大小。
在一些实施方式中,如图2所示,历史数据294可形成包含开放数据块295和封闭数据块297的一个或多个数据块,数据块可以为分派在存储器160中的固定大小的数据缓存。正如后续讨论的,开放数据块为由于压缩或解压缩输入数据流而产生的处于更新阶段的块,而封闭数据块为封闭式且当前不接受来自压缩或解压缩输入数据流的附加数据的块。可导致块对附加数据封闭的原因有许多,例如,固定大小的块已经填满数据或没有足够的空间来接受新数据,因此该块不能接纳任何更多的数据从而封闭起来,此外,即使没有被填满数据或有接受新数据的足够的空间,当系统检索或更新不同的块时,块亦封闭。关于历史数据294和表296的详细描述将在下面讨论,开放数据块中的一个将被指定为工作数据块。
数据压缩模块230可接收原始数据(例如来自图1中的处理器112执行的另一运用)和指令来压缩原始数据,数据压缩模块230然后可利用表296中的信息来从历史数据294中寻找原始数据,历史数据294的一部分可以存储在存储器(例如图1中存储器114)和/或存储设备(例如图1中的存储设备116)中。如果数据压缩模块230从历史数据294中找到了原始数据,数据压缩模块230可以生成引用令牌,该引用令牌包含协助接收系统从相应历史数据中找到原始数据的相同片段的信息,包含在引用令牌中的该信息可指示在历史数据294中的位置以及与原始数据相匹配的数据的长度,然后引用令牌被传输至接收系统。另一方面,如果数据压缩模块230不能从历史数据294中找到原始数据,原始数据将作为原始令牌的一部分被传输至接收系统。在一些实施方式中,输入数据也可添加至历史数据294中,将在更新的历史数据294中定位所添加输入数据的信息在表296中更新。在一些实施方式中,令牌流可利用一个或多个无损数据流压缩算法在传输前被压缩。在一些实施方式中,令牌流(已压缩或未压缩)可通过如图1所示的网络界面118包格式化,包格式化的令牌流可在网络(如图1所示的网络130)上传输。数据压缩模块还可以添加原始数据到历史数据294中,将在更新的历史数据294中定位所添加数据的信息在表296中更新。
数据解压缩模块250可从数据压缩模块230所传输的令牌流中重建数据流,接收及多路分解包格式化后的数据以检索含有引用和/或原始令牌的数据包(如果为压缩数据,并解压缩多路分解的数据)得到令牌流,在此之后,数据解压缩模块250可从令牌流中识别引用令牌和/或原始令牌,数据解压缩模块250可基于引用令牌的位置和长度信息从历史数据294中检索与引用令牌相关联的数据,添加检索到的数据至输出数据流即例如处理器112上执行的另一应用,对于原始令牌,数据解压缩模块250可添加包含有原始令牌的原始数据至输出数据流。数据解压缩模块250还可更新历史数据294来包含输出数据流,将在更新的历史数据294中定位所添加数据的信息在表296中更新。
含有冗余的数据压缩与解压缩方法和系统的具体实施方式在2013年12月7日提交的发明名称为数据压缩方法与装置的美国临时专利申请No.61/913,295中以及在2014年12月3日提交的发明名称为含冗余的数据压缩与解压缩的系统和方法的共同未决美国非临时专利申请NO.14/559,816中已经描述,上述两项专利申请的全部内容在此以引用方式并入作为参考。
历史数据管理器270在数据压缩模块230和数据解压缩模块250执行更新时管理历史数据294的创建与删除,例如,历史数据管理器270可以删除历史数据294中占有新历史数据的空间的旧数据,历史数据管理器270亦可与接收系统同步,或与系统200从其处接收关于历史数据变化的数据的其他系统同步,这样,参与令牌流传输的两边具有相同的历史数据。
探索握手模块290判定通信节点是否支持与本发明的实施方式一致的压缩和/或解压缩方法,例如,判定可包含节点是否包含数据压缩模块230和/或数据解压缩模块250以及是否可以根据本发明的实施方式处理(和/或传输)引用令牌和原始令牌。
压缩设备握手和探索的方法和系统的具体实施方式在2014年1月19日提交的发明名称为压缩设备握手和挖掘的方法和系统的美国临时专利申请No.61/926,158中已经描述,上述专利申请的全部内容在此以引用方式并入作为参考。
图3A示出根据本发明的实施方式的便于历史数据查找的示例数据块结构300的框图。如前所述,历史数据可形成一个或多个数据块(例如图2中的开放数据块295和封闭数据块297),每个数据块以数据块结构300表示,数据块结构300存储于存储器(例如图1中的存储器114)和/或存储设备(例如图1中的存储设备116)中。正如后续讨论的,数据块结构可从存储器中交换出存入存储设备中,或者反向进行。每一数据块结构300包含块数据310,块数据310可包含一个或多个数据区块312和314,区块是指数据大小单位,该数据大小单位被支持与本发明的实施方式一致的压缩和/或解压缩方法的所有设备所采用。
数据块结构300亦与块表316相关联,虽然图3A显示块表316为数据块结构300的一部分且紧邻数据区块312和314,应当理解为,块表316不需要存储于与数据区块相同的位置。在一些实施方式中,块表316可以为图2中的表296的一部分,包含用于在数据块结构300中定位数据片段的信息,这些信息可包含用于识别数据片段以及数据块结构300中数据定位的识别码。如图3A所示,块表316包含存储区块签名的域318,区块签名用于代表数据特定区块的内容,例如,“1234”的区块签名关联数据区块312,另外,“5678”的区块签名关联数据区块314。关于区块签名生成的进一步描述将在下面讨论。
块表316还包含以字节存储有数据偏移的域320,数据偏移关联数据块结构300中数据的特定区块的位置。因为数据区块312为数据块结构300中第一数据区块,与数据区块312相关联的数据偏移为0,数据区块314在数据块结构中紧邻数据区块312存储。在这一特殊实施例中,数据区块312的大小为64字节,所以与数据区块314相关联的数据偏移为64字节。数据块结构300进一步包含域322,域322可用来将一个特定数据块结构300与块识别码(ID)关联起来,块ID在为历史数据存储相同数据块的系统之间是一致的,唯一识别数据块。基于已知的区块签名,通过寻找与已知签名匹配的一个或多个区块签名,数据片段可在该特定数据块结构中高效地被定位(或判定为无数据片段),虽然图3A未示出,每一数据块结构300还可关联一个时间戳,查找可从最近更新的指定为工作历史数据块的数据块结构上开始。虽然图3A中使用数字串作为块ID,应当理解为,可以使用数字、符号或字母的任何组合作为块ID。
图3B示出根据本发明的实施方式的便于历史数据查找的示例存储器块表350的框图。存储器块表350可方便从最近存储在易失性存储器(例如图1中的存储器114)的每一历史数据块(例如根据图3A中的数据块结构300存储)中查找数据片段。如图3B所示,存储器块表350包含存储块ID的域352,每一块ID识别存储器中的一个数据块结构。对于域352识别的每一数据块结构,存储器块表350进一步包含分别关联代表数据块结构内特定数据区块和数据区块位置的域354和356,基于已知签名,通过寻找与已知签名匹配的一个或多个区块签名,输入数据的片段可在存储于存储器内的一组数据块结构中高效地被定位(或判定为无数据片段),如果输入数据位于特定数据块结构中,关联这一特定数据块结构以及该数据块结构中数据位置的块ID可被检索到。在一些实施方式中,检索到的块ID以及位置信息可用来做二次甚至多次精细检索,相关内容将在下面详述。是否需要二次检索取决于区块签名如何计算—如果区块签名不能独一无二地识别数据(即不同数据值可产生相同的区块签名),二次检索可能是必要的,以确定位于数据块结构内的数据区块与输入数据完全一致,这样,由此生成的引用令牌准确代表输入数据。
图3C示出根据本发明的实施方式的便于历史数据查找的示例磁盘块表370的框图。磁盘块表370可方便从最近存储在非易失性存储器(例如图1中的存储器116)的每一历史数据块(例如根据图3A中的数据块结构300存储)中查找数据片段。如图3C所示,磁盘块表370包含存储块ID的域372,每一块ID识别代表存储设备中数据块的数据块结构,对于域372识别的每一数据块结构,磁盘块表370进一步包含存储磁盘签名的域374,磁盘签名用于代表存储于存储设备中的多个数据区块的内容。
在一些实施方式中,表316、350和370提供用于查找组织为数据块结构300的历史数据(以下简称历史数据块)的层级结构,为了定位历史数据中的数据片段,通过寻找与数据的签名相匹配的一个或多个具有区块签名的区块,基于与工作历史数据块相关联的表316,从载入存储器的最近历史数据块(指定为工作历史数据块)开始查找。如果不能找到数据,基于表350上的信息,查找范围可扩展至最近载入存储器的每个历史数据块。基于一些原因,首先限定在存储器内查找是可取的,第一,很有可能存储于存储器内的数据包含最近的更新(例如,包含因压缩或解压缩而添加的数据),因此,找到数据片段的可能性会更高;第二,从存储器中访问数据通常比从存储设备中访问数据要块,这就加快查找,因此,可从最近存储于存储器上的历史数据块中开始查找。
如果从存储器中不能定位数据片段,可以从存储于存储设备上具有表370上的信息的历史数据块中开始查找,如果基于磁盘签名找到匹配,含有关联匹配磁盘签名的块ID的历史数据块可载入到存储器,那么通过关联的表316上的信息,可在最新载入的历史数据块中基于区块签名更精确地进行查找。
图4A示出根据本发明的实施方式的示例压缩模块430的框图。在一些实施方式中,压缩模块430的功能类似于如图2所示的数据压缩模块230的功能。压缩模块430包含签名生成器431、第一阶段压缩模块432以及第二阶段压缩模块433。第一阶段压缩模块432进一步包含粗查找模块434、细查找模块435、原始令牌生成器模块436以及引用令牌生成器模块437。
随着压缩模块430接收输入数据,该数据可被签名生成器431处理生成一个或多个区块签名,其中,每个区块签名与每一连续的大小为例如64字节的数据区块相关联,关于区块签名的生成将在下面进一步详述。
输入数据的至少一个区块签名生成后,生成的区块签名以及输入数据可通过第一阶段压缩模块432的粗检索模块434。基于生成的区块签名,粗检索模块可在特定历史数据块(例如工作历史数据块)中、基于例如与工作历史数据块相关联的块表316上的信息查找匹配的区块签名。在一些实施方式中,通过利用例如如图3A-3C所示的表316、350以及370上的信息,粗检索模块可对存储于存储器和存储设备中的历史数据块进行层次查找,如果找到匹配,这表明找到输入数据(或其部分)的准确副本的可能性很大,工作历史数据块中的输入数据以及与含有匹配区块签名的数据区块相关联的数据偏移可通过细检索模块。
在细检索模块435阶段,可进行工作历史数据块中输入数据的更精确查找。在一些实施方式中,进行这类查找来确定位于该工作历史数据块的数据区块与输入数据完全一致。基于数据偏移,细检索模块435可读取数据区块并针对该输入数据进行准确字节串比较来确认输入数据与数据区块完全匹配。为了最大化与相同大小输入数据的一部分相匹配的数据区块的数量,在数据偏移指示位置之前或之后,通过从工作历史数据块中读取数据区块(或其部分),细检索模块435亦可正向或反向扩大比较范围。在工作历史数据块中定位最大量匹配数据区块后,输入数据的相应部分可由引用令牌代表,该引用令牌指示历史数据块中匹配数据区块的位置及数量(或作为数据区块一部分的匹配数据的长度)。在一些实施方式中,引用令牌还包含与工作历史数据块相关联的块ID。引用令牌由引用令牌生成器模块437生成,并添加至代表输入数据的令牌流中。
另一方面,对于输入数据的一部分,尽管事实是匹配的区块签名存在,但是粗检索模块434没有找到匹配的区块签名,细检索模块435也没有精确匹配输入数据的一部分的数据片段,那么这样一个输入数据的一部分用原始令牌代表。在一些实施方式中,原始令牌包含输入数据的一部分的副本,原始令牌由原始令牌生成器模块436生成,并添加至代表输入数据的令牌流中。在一些实施方式中,压缩模块430进一步包含历史数据更新模块438,历史数据更新模块438将输入数据添加至压缩模块430可访问的历史数据中,并在存储器块表350和磁盘块表370至少之一中更新,存储器块表350和磁盘块表370中含有区块和/或为输入数据生成的磁盘签名。
第一阶段压缩模块432为令牌流生成至少一个令牌后,生成的令牌流可通过第二阶段压缩模块433进一步压缩令牌流。在一些实施方式中,第二阶段压缩模块433应用无损数据流压缩算法进行压缩,然后压缩的令牌流可用来代表压缩状态的输入数据。
图4B示出根据本发明的实施方式的示例解压缩模块450的框图。在一些实施方式中,解压缩模块450的功能类似于如图2所示的数据解压缩模块250的功能。解压缩模块450包含令牌流解压缩模块451、令牌处理模块452、签名生成器模块453以及历史数据更新模块454。令牌流解压缩模块451可从例如压缩模块430中接收压缩的令牌流,根据压缩模块430的第二阶段压缩模块433使用的压缩算法进行解压缩来恢复令牌流,恢复的令牌流进而由令牌处理模块452处理,令牌处理模块452可以从令牌流中识别一个或多个引用令牌和/或原始令牌,通过引用令牌,令牌处理模块452可从解压缩模块450可访问的历史数据中定位工作历史数据块(例如最近更新的块,或由作为引用令牌的一部分传输的块ID信息所识别的数据块),并基于位置信息以及引用令牌内包含的匹配数据大小信息,提取引用令牌所代表的历史数据的一部分。令牌处理模块452还可检索包含在原始令牌内的输入数据的一部分(提供给压缩模块430),基于令牌流,令牌处理模块452可重建与输入数据一致的数据流,然后重建的数据流通过签名生成器模块453,签名生成器模块453生成区块和/或重建数据流的磁盘签名。历史数据更新模块454可将重建的数据流添加至解压缩模块450可访问的历史数据中,这样,重建的数据流与解压缩模块450可访问的历史数据匹配并在存储器块表350和磁盘块表370至少之一中更新,存储器块表350和磁盘块表370中含有区块和/或为重建数据流生成的磁盘签名。
图5A示出根据本发明的实施方式,生成和删除数据块的示例性方法的流程图。数据块可由图3中的数据块结构300代表,亦可为由图4A中的数据压缩模块430以及图4B中的解压缩模块450访问和/或更新的历史数据的部分。在一些实施方式中,方法500可通过例如在电子设备(例如图1中的计算机系统110)上运行的如图2中的历史数据管理器270实现。虽然流程图披露以下特定顺序的步骤,应当注意的是,为与本发明的公开一致,至少某些步骤可做适应性移动、修改或删除。并且,以下步骤通过电子设备实现,应当注意的是,这些步骤通过多个电子设备实现。
步骤502中,电子设备(例如数据压缩设备)分派一个新数据块或选择一个先存在的数据块来添加数据,导致新数据分派的情况有许多,例如,数据压缩模块430接受输入数据,发现该输入数据不与历史数据的任何部分相匹配,然后决定将该输入数据添加至历史数据中,新数据块然后被分派以存储输入数据。此外,在接收原始令牌后,数据解压缩模块450亦可决定将包含在原始令牌中的数据添加至历史数据中,从而新数据块亦可被分派。
步骤502可包含多个分步骤,参考图5B,图5B示出示例性方法503,示例性方法503可为图5A中的步骤502的一部分,压缩设备550(例如压缩模块430在其上运算的电子设备)执行步骤504分派压缩数据块后,该设备执行步骤505以生成新块ID并将生成的新块ID与新压缩数据块关联起来。然后压缩设备可执行步骤506以生成第一令牌,进而执行步骤507以传输含有第一令牌的块ID至解压缩设备560(例如解压缩模块450在其上运算的电子设备),接收块ID后,解压缩设备可执行步骤508亦以分派新解压缩数据块,然后将新分派的数据块与接收的块ID关联起来,如此,创造与块ID相关联的一对压缩-解压缩数据块。块ID的管理将在下面详细讨论。在典型运算时,块ID将与该对压缩与解压缩数据块唯一相关联,该对数据块应当存储一致的数据。
另一方面,电子设备亦可选择之前分派且目前没有更新的先存在的块。在一些实施方式中,数据块可基于与该数据块相关联的时间戳被选择,例如,最近更新的数据块可被选择,选择的或者最近分派用于接受新数据的数据块将被指定为工作数据块。
回至图5A,工作数据块在步骤502中被分派或选择后,电子设备执行步骤522,在压缩或解压缩时添加输入数据至数据块。步骤522包含多个分步骤,参考图5C,图5C示出示例性方法523,示例性方法523可为如图5A中步骤522的一部分。压缩设备550接收输入数据后,将未压缩数据在步骤524中写入至工作压缩数据块,然后在步骤525中压缩设备550传输未压缩数据(原始令牌中)以及工作压缩数据块的块ID至解压缩设备560,解压缩设备560接收未压缩数据以及块ID后,可在步骤526中将未压缩数据写入至其对应的工作解压缩数据块中。
在一些实施方式中,选择最近分派的数据块的情况下,输入数据可添加至为块数据分派的空间的第一字节处,另一方面,如果选择先存在数据块,新数据添加至新数据开始位置,该新数据开始位置反映先存在数据块中先存储数据的大小和终端位置。在一些实施方式中,如后续讨论所述,当对先存储数据的在先更新结束时,先存在数据块进入确定状态后,然後压缩设备与解压缩设备互相确定新数据开始位置。在一些实施方式中,数据添加后,压缩设备与解压缩设备再互相确定更新的数据的终端位置,如此安排,压缩与解压缩设备可分别添加一致的数据至压缩数据块和解压缩数据块中相对相同位置,进而两个更新的数据块可存储一致的数据,这使得压缩设备基于输入数据与存储在压缩数据块中的数据之间的关系生成引用令牌,并在这样的期待下:解压缩设备具有存储与压缩数据块一致的数据的解压缩数据块,且可从引用令牌和存储在解压缩数据块中的数据中重建输入数据,压缩设备将生成的引用令牌传输至解压缩设备。
在一些实施方式中,上述的确定可通过在压缩设备与解压缩设备之间交换信息来完成,例如,在解压缩设备在步骤526中的将其解压缩数据块数据更新后,解压缩设备可执行步骤527,传输包含有更新的解压缩数据块的新数据终端位置的信息以及与之相关联的块ID至压缩设备,进而,压缩设备亦可执行步骤528,传输包含有更新的压缩数据块的新数据终端位置的信息以及与之相关联的块ID至解压缩设备。在一些实施方式中,这些信息在一定量字节的输入数据添加至数据块的任何时候可由任一设备生成,压缩设备与解压缩设备不必等待,直到新数据的添加结束以交换信息。
每一设备可将正在其上运算的数据块的新数据终端位置与从另一设备接收的新数据终端位置比较,如果两个新数据终端位置匹配,则新数据终端位置确定,每一数据块中的到被确定的新数据终端位置为止的所有数据可用以引用令牌的生成(通过压缩设备)或用以接收的引用令牌的处理(通过解压缩设备)。另一方面,设备之一(例如上述的压缩设备)亦可判定另一设备(例如上述的解压缩设备)具有不符预期的运转状态,这意味着存储于压缩设备和解压缩设备中的历史数据之间存在差异,上述判定可基于或可不基于上述比较结果。
参考图5D,图5D示出可通过解压缩设备执行的示例性方法527,该示例性方法527在如图5A步骤522中解压缩数据块的更新中作为确认步骤的一部分。解压缩设备首先执行步骤528从压缩设备中接收与工作压缩数据块相关联的块ID,然后执行步骤529以判定压缩设备是否能基于接收的块ID定位相应的工作解压缩块,如果不能定位工作块,执行步骤530,发送指令给压缩设备以立即删除工作压缩数据块。另一方面,定位工作解压缩块后,解压缩设备执行步骤531,判定解压缩设备是否已经从压缩设备中接收到立即删除指令(后续讨论)。如果没有接收到这样的指令,解压缩设备将执行步骤532,继续工作解压缩数据块的更新,如果接收到了这样的指令,解压缩设备执行步骤582(亦如图5A中所示)以立即删除定位了的工作解压缩数据块。作为步骤582的一部分,删除了的块也从所有散列表(例如图3中的存储器块表350和磁盘块表370)中移除,这样,该数据块将不会用以进一步的压缩或解压缩,而不会被访问。
参看图5E,图5E示出可通过压缩设备执行的示例性方法534,该示例性方法534在如图5A步骤522中压缩数据块更新中作为确认步骤的一部分。压缩设备首先执行步骤535,从解压缩设备中接收工作解压缩数据块的新数据终端位置以及与其相关联的块ID。压缩设备然后执行步骤536,判定是否接收到不符预期的数据终端位置,例如,压缩设备可能并不预期从解压缩设备中接收比压缩数据块中先存储数据的终端位置更小的新数据终端位置(例如,在数据被添加之前),因为新数据将在先存储数据之后顺次添加。此外,压缩设备也可能预期从解压缩设备中接收的新数据终端位置小于其本身的新数据终端位置(例如,如果解压缩设备尚未完成数据添加),或者等于其本身的新数据终端位置(例如,如果解压缩设备已经完成数据添加)。多种原因可导致这些不符预期的状态的发生,举例来说,解压缩设备可能已经添加新数据至它的工作解压缩数据块中,并已经传输包含更新了的解压缩数据块的新数据终端位置的信息(例如通过执行如图5C中的步骤527),但是该信息在网络中丢失,压缩设备不能确认解压缩数据块中的新数据终端位置,或者不能确认解压缩设备接收的新数据是否与压缩设备发送的相匹配,结果导致被两设备存储的历史数据存在差异,并且当选择任何块存储更多数据时此差异将在继续存在。
判定在步骤536中接收到不符预期的数据终端位置后,压缩设备可执行步骤537,发送指令至解压缩设备,删除工作解压缩数据块,然后执行步骤538,删除工作解压缩数据块对应的工作压缩数据块。如果接收到的数据终端位置与期望一致,压缩设备将执行步骤539,判定压缩设备是否已经从解压缩设备中接收到删除指令,如果没有接收到这样的指令,执行步骤540,继续工作解压缩数据块的更新,另一方面,如果从解压缩设备中接收到立即删除指令,执行步骤582,立即删除工作压缩数据块,否则,压缩设备将执行步骤540,继续工作压缩数据块的更新。
如此安排,可降低通过压缩设备基于解压缩设备不具有的历史数据生成引用令牌的可能性。
回至图5A,数据添加至工作数据块且新终端数据位置确认后,电子设备可执行步骤542进入封闭状态,使数据块准备成为封闭数据块,当数据块当前不接受(或不能接受)新数据新数据时,数据块将成为封闭数据块,导致进入封闭状态的情形多种多样,例如,固定大小的数据块已经填满数据,压缩设备或解压缩设备也可能选择更新或读取不同的数据块,导致当前开放块进入封闭状态。当压缩数据块进入封闭状态时,相应的解压缩数据块(即与相同的块ID相关联的块)也应该进入封闭状态,反之亦然。此外,压缩设备与解压缩设备也可通过在压缩设备和解压缩设备之间交换信息确认工作压缩与解压缩数据块对两者正在进入封闭状态来确定数据块对存储一致的数据以及在被封闭前已经以相同方式更新,从而确认两者处于将封闭的状态。
参考图5F,图5F示出示例性方法543,该示例性方法543可为图5A步骤542中确认步骤的一部分。解压缩设备进入解压缩数据块的封闭状态后,解压缩设备可执行步骤544,向压缩设备传输其正进入解压缩数据块的封闭状态的请求,该请求可包含与解压缩数据块相关联的块ID以及解压缩数据块的更新数据终端位置。如果压缩设备判定接收到的数据的终端位置与其本身的数据终端位置相匹配,那么压缩设备执行步骤545,进入压缩数据块的确认状态,压缩数据块可封闭。此外,如果压缩设备已经进入封闭状态,其亦可执行步骤546,响应于步骤544中接收到的请求,通过回传应答至解压缩设备,意味着压缩设备也正进入与接收到的块ID相关联的相应压缩数据块的封闭状态。该应答可包含块ID以及压缩数据块的更新了的数据的终端位置。如果解压缩设备判定接收到的数据的终端位置与其本身的数据终端位置相匹配,那么解压缩设备执行步骤547,进入解压缩数据块的确认状态,压缩数据块亦可封闭。在一些实施方式中,可发送多个一致的请求和应答来避免它们在传输中丢失,在它们进入相关数据块的确认状态后,这些设备可以忽略这些请求或应答。
如上所述,当封闭块开放接受下一新数据时,封闭数据块的确认了的新数据终端位置可以作为添加下一新数据的开始位置。此外,填满或不能容纳附加数据的封闭块亦可从存储器中替换入非易失性存储设备,如上所述,如果压缩设备在查找历史数据时基于磁盘签名判定匹配,封闭块稍后可回传至存储器中。
另一方面,如果数据块对的新数据终端位置不相匹配,设备之一可判定另一设备具有不符预期的运转状态,如上所述,这意味着存储于压缩设备和解压缩设备中的历史数据存在差异,作为应答,上述设备可能发送指令给另一设备删除另一设备的处于封闭状态的数据块以及其自身相应的数据块。同样地,即使判定新数据终端位置相匹配,任何时候设备接收到删除指令,该设备也将删除指令所针对的数据块。
通过确认在压缩设备与解压缩设备之间数据终端位置,压缩设备或解压缩设备可使用封闭数据块,压缩设备可执行步骤551,判定接收到的输入数据是否与封闭数据块相匹配,这一判定可通过例如前述的如图4A中的第一阶段压缩模块432做出,如果找到匹配,压缩设备进行步骤552,传输反映输入数据与封闭数据块之间关系的一个或多个引用令牌,这一关系可以为例如存储于与输入数据一致的封闭数据块中的数据的大小和位置。此外,解压缩设备亦可使用封闭数据块从接收到的令牌中重建输入数据(图5A中未示出)。
另一方面,如果找不到匹配,可能需要在某个时间删除封闭数据块以节约有限的资源,这种情况下,两设备可能会选择一个或多个封闭块删除。在一些实施方式中,删除对象的选择可基于与该块相关联的时间戳以按时间次序删除块。此外,当压缩-解压缩数据块对(即两者均与相同的块ID相关联)中的一个被删除,该数据块对中的另一个同样也需要被删除,以避免存储于两设备中的历史数据之间的差异。而且,也需要确认选择的数据块当前没有被两设备之一访问(或很快将被访问),从而避免该设备对压缩或解压缩产生干扰。回至图5A,这些可在压缩设备和解压缩设备两者进入步骤562中的预删除状态时且在步骤582封闭数据块从所有散列表中被删除或移除前实现。
在一些实施方式中,步骤562进一步包含多个分步骤,其中压缩设备与解压缩设备交换信息以确认已经准备好删除选择的数据块。参考图5G,图5G示出示例性方法563,该示例性方法563可为图5A的步骤562中进入预删除状态的一部分。解压缩设备首先执行步骤564,选择要删除的数据块,这种选择可基于与数据块)相关联的时间戳(例如,选择最旧的数据块。步骤565中,解压缩设备还为选择的数据块进入预删除状态,设定一第一删除时间戳,该时间戳指示删除选择的数据块不能晚于的时间。
在一些实施方式中,解压缩设备亦可将第一引用计数与选择的数据块相关联起来,该第一引用计数指示选择的数据块被访问以处理引用令牌的次数,压缩设备还可将第二引用计数与相应的数据块相关联起来,该第二引用计数指示相应的数据块被访问处理引用令牌的次数。在正常操作下,该第一引用计数和第二引用计数对于任何给定输入数据部分的处理应该一致,因为压缩设备多次访问数据块生成引用令牌,解压缩设备应该访问相应的数据块相同的次数以彻底处理上述引用令牌,重建该给定输入数据部分。在一些实施方式中,压缩设备与解压缩设备在数据块被删除前可能需要与该数据块相关联的两个引用计数匹配,从而降低删除正被访问(或很快将被访问)实现压缩或解压缩的数据块的可能性。
第一删除时间戳和第一引用计数生成后,解压设备可执行步骤566,传输删除信息至压缩设备,示意解压缩设备正进入预删除状态,该信息可包含针对选择的数据块的块ID、第一引用计数以及第一删除时间戳。压缩设备接收该信息后,执行步骤567,定位与接收到的块ID相关联的数据块并获得与定位了的数据块相关联的第二引用计数,进而执行步骤568,为定位了的数据块进入预删除状态。然后压缩设备可执行步骤569,回传删除信息至解压缩设备,示意压缩设备也正进入预删除状态,该信息同样包含定位了的数据块的块ID、第二引用计数以及第一删除时间戳。在一些实施方式中,每一设备在从另一设备接收时间戳后,将接收到的时间戳与其本身所有的进行比较并采用更早到期的时间戳。
接收到示意进入预删除状态的删除信息后,每一设备在删除选择的数据块之前可进一步执行多个步骤。参考图5H,图5H示出示例性方法570,该示例性方法570可在每一设备接收删除信息后执行。电子设备(压缩设备或解压缩设备)首先执行步骤571,接收删除时间戳以及与选择的数据块相关联的引用计数。然后执行步骤572,核对是否接收到立即删除指令,在预删除状态下,接收到这样一个指令是有可能的,例如,如果一个设备基于接收到的块ID未能定位数据块,可能会发送立即删除指令至发送设备以立即删除关系到该块ID的数据块。如果接收到这样一个指令,该设备将执行步骤582(同样如图5A所示),立即删除选择的数据块;如果没有接收到这样一个指令,则该设备可执行步骤573,核对接收到的引用计数是否与其本身的针对该数据块的引用计数相匹配,如果引用计数相匹配,该设备将执行步骤582,删除该数据块,如果不相匹配,该设备将核对是否到了接收到的时间戳(或其本身的时间戳,如果其本身的时间戳更早到期)所指示的时间,如果到了,该设备同样将执行步骤582,删除该数据块,否则,该设备将回至步骤572,直到删除选择的数据块。
图6A-6C示出根据本发明的实施方式,用于数据块识别码管理的示例性缓冲区600的框图。如图6A所示,缓冲区600包含入口601至603,每一入口存储一个编号,每一入口可以分派(以如图6B以及6C所示的不透明颜色标记),表示存储与该入口的编号作为块ID已经分派给最近关联的数据块,或者可以不分派,该块ID用以与压缩-解压缩数据块对相关联。在一些实施方式中,奇数或偶数编号可以用作块ID,关于是否用奇数或偶数编号的判定可以以,例如,与缓冲区在其上进行管理的硬件相关联的全域性唯一识别码为依据。在一些实施方式中,全域性唯一识别码可从例如与硬件相关联的媒介访问控制(MAC)地址中导出。虽然图6A-6C示出一系列单调增加的偶数被存储,应当理解为,任何次序的数字、字母或符号可以存储在缓冲区中并用作块ID。
在一些实施方式中,缓冲区600可以具有环形机构,入口601和613同样为相邻的入口。缓冲区60进一步包含开始指针614以及终端指针615,这些指针可以设置成指示未分派的入口组,这些指针可以采用任何形式,比如数字或地址,并可通过任何合适的数据结构(例如数字和指针之间的映射表)保持。在一些实施方式中,其中缓冲区中存储单调增加(或减小)的数字,这些数字可用作指针。
参考图7,图7示出管理块ID的方法700,以通过例如图2中的历史数据管理器270实现数据块的关联及删除。当缓冲区600最新创建时,执行步骤701,预置开始指针614使其与入口601相关联起来以及终端指针615使其与入口613关联起来。指针的预置在图6A中示出。
回至图7,历史数据管理器270执行步骤702,判定关联新数据块(例如压缩设备不能在块表中找到匹配继而判定生成原始令牌,或解压缩设备刚好接收到原始令牌)后,步骤703中,关联新数据块。步骤704中,存储于当前与开始指针614相关联的入口的数字可以用作将与新数据块相关联的新块ID,然后该入口在步骤705中成为分派的入口。在一些实施方式中,入口顺次分派,开始指针614在步骤706中被分派给下一个入口,执行步骤706后,历史数据管理器270可重新回至步骤702,判定是否关联新数据块。
作为示例性实施例,回至图6A,图6A中的入口601、602、603、604、605、606、607以及608可按照时间顺序成为分派的入口,其中,入口601首先被分派,入口608最后被分派,终端指针在分派过程中不动。如此安排,如图6B所示,开始指针614则可与入口609相关联,终端指针615则随着分派保持与入口613相关联。
回至图7,如果新块没有被关联,通过步骤707,历史数据管理器270可进一步判定是否删除数据块,上述判定可以以,例如,与数据块相关联的时间戳(例如删除最旧的数据块以节约空间)为依据或在接收到如图5G和5H中的立即删除指令或删除信息之后做出。删除数据块后,与之相关联的块ID将返回缓冲区600中,这样编号可以重新分派给将来新的数据块。步骤708中,接收到相关联的块ID后,执行步骤709,历史数据管理器270可定位缓冲区中的块ID并设定与该块ID相关联的入口为未分派入口,然后执行步骤710,将该入口与终端指针615相关联起来,执行完步骤710后,历史数据管理器270可重新回至步骤702,判定是否关联新数据块。
作为示例性实施例,参考图6C,上述分派后,入口601成为未分派的入口,因为与块ID2相关联的数据块最近已经删除,终端指针615当前与入口601相关联,特别因块以相同的时间次序(除了如上所述的情形,检测到不符预期的运转状态而导致接收到立即删除指令)精确定位并删除,未分派入口的蔓延区块可大部分的保留,这样一个蔓延区块的边界可由开始指针614以及终端指针615指示。在一些实施方式中,这样的安排方便在压缩设备与解压缩设备之间交换关于每一设备已经分派和使用的块ID的信息,从而增大每一设备将相同组块ID分派给相同组数据块的可能性,例如,设备其中之一因资源限制可能需要删除一些数据块,但因例如存在中断两设备之间所有通信的网络连接阻断,不能传输删除信息给另一设备,两设备恢复通信后,每一设备很可能通过获取开始指针以及终端指针信息或指定作为开始指针以及终端指针的存储编号而找到另一设备已经创建或删除的数据块,从而为新数据块仅分派两设备均未分派的编号。
上述的说明书中,实施方式描述了根据不同实施而不同的很多特定的细节,当然可作出对所描述的实施方式的某些适应性的改变和修正,对于本领域的技术人员,参考本发明的所公开的说明书及实施,其他实施方式是显而易见的。说明书和实施例仅作为示例性说明,本发明的真正保护范围及精神由以下的权利要求书限定。附图中所示的步骤顺序仅用于说明目的,并不是对任何步骤的特定顺序的限定,同样地,本领域的技术人员可领会到在实施相同方法时这些步骤可以以不同顺序进行。