基于差异的内容联网
技术领域
本发明大体上涉及内容中心网络(CCN)。更确切地说,本发明涉及一种用于实施基于差异的内容投递的系统和方法。
背景技术
因特网和电子商务的激增持续激发网络行业中的革命性改变。当今,从在线电影观看到每日新闻投递、零售销售和即时通讯,大量的信息交换是在线进行的。越来越多数目的因特网应用也在变成移动的。然而,当前因特网在主要基于位置的寻址方案上操作。两种最普遍存在的协议:因特网协议(IP)和以太网协议,都是基于末端主机的地址。也就是说,内容的消费者仅可通过从通常与物理对象或位置相关联的地址(例如,IP地址或以太网媒体接入控制(MAC)地址)明确请求内容来接收所述内容。此限制性寻址方案正逐渐变得更不足以满足不断改变的网络需求。
近年来,行业中已经提出了信息中心网络(ICN)架构,其中直接对内容进行命名和寻址。示例性ICN架构:内容中心联网(CCN),引入了新的内容传输方法。并非在应用级将网络业务视为内容在其上行进的端到端对话,而是基于内容的唯一名称来请求或返回内容,并且网络负责将内容从提供者路由到消费者。应注意,内容包含可以在通信系统中传输的数据,包含例如文本、图像、视频和/或音频等任何形式的数据。消费者和提供者可以是在计算机旁的人或在CCN内部或外部的自动化过程。一条内容可指代整个内容或内容的相应部分。例如,报纸文章可能由体现为数据包的多条内容表示。一条内容也可以与元数据相关联,所述元数据以例如验证数据、创建日期、内容所有者等信息来描述或增补这条内容。
在当前CCN中,当内容公布者更新一条内容(例如,视频文件)时,其需要重新公布整个内容块,所述内容块通常用不同的版本名称,即使更改或编辑的量可能较小。因此,当早期版本的接收者尝试更新内容块时,其需要下载整个重新公布的内容块,即使实际上仅更新了少量内容对象。
发明内容
本发明的一个实施例提供一种用于更新内容块并且在网络上投递经更新内容块的系统。在操作期间,系统更新对应于原始清单的内容块以及由原始清单引用的一组对象,并且产生经更新内容块的更新清单。更新清单包含对原始清单的引用以及对一组更新对象的引用,并且所述更新对象组指示在内容块与经更新内容块之间的差异。所述系统随后公布所述更新清单和所述更新对象组,由此有助于对经更新内容块的请求者检索所述更新清单和所述更新清单组,并且使用所述更新清单和所述更新对象组来构建经更新内容块。
在此实施例的变型中,原始清单通过所述对象组的基于散列的名称来引用所述对象组。
在另一变型中,更新清单经过差异编码,指示与原始清单的差异,由此有助于构建较新清单,所述较新清单通过基于散列的名称引用对应于经更新内容块的一组内容对象。
在另一变型中,原始清单是分层的,并且其中经过差异编码的更新清单引用原始清单分层结构的未经修改的分支。
在此实施例的变型中,更新对象包含对内容块进行的更改以及所述更改在内容块内的对应字节位置。
在另一变型中,所述更改的字节位置以更新对象的名称进行编码。
在此实施例的变型中,更新对象包含一组经修改对象以及经修改对象在对应于内容块的所述对象组内的对应序列号。
在另一变型中,经修改对象的序列号以经修改对象的名称进行编码。
在此实施例的变型中,对原始清单和/或更新清单以加密方式进行签名。
在此实施例的变型中,网络是内容中心网络(CCN),并且所述对象组是标准的CCN内容对象。
附图说明
图1图解说明根据本发明的实施例的网络的示例性架构。
图2呈现图解说明清单格式的简图。
图3呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。
图4呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。
图5呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。
图6呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。
图7呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。
图8呈现图解说明根据本发明实施例实现基于差异的内容投递的示例性内容更新过程的流程图。
图9呈现图解说明根据本发明实施例的下载和构建经更新内容块的示例性过程的流程图。
图10图解说明根据本发明实施例的实现基于差异的内容联网的示例性系统。
在图式中,相同参考标号指代相同图式元件。
具体实施方式
概述
本发明的实施例提供一种用于实施基于差异的内容联网的系统和方法。更确切地说,当更新文件时,公布者仅公布差异而不是公布整个经更新文件,使得在其本地高速缓冲存储器中具有早期版本文件的接收者仅需要下载差异,并且能够通过将所述差异应用到早期版本文件来构建经更新文件。在一些实施例中,可以使用清单(也称为安全目录或聚合签名对象)来促进基于差异的编码。用于差异的清单引用早期版本的清单以及差异对象。在一些实施例中,清单自身可以经过差异编码。
一般来说,CCN使用两种类型的消息:兴趣和内容对象。兴趣携载分层结构化的可变长度标识符(HSVLI),也称为内容对象的“名称”或“CCN名称”,并用作对于所述对象的请求。如果网络元件(例如,路由器)接收到对同一名称的多个兴趣,那么其可聚合那些兴趣。沿着具有匹配内容对象的兴趣的路径的网络元件可以高速缓冲存储且返回所述对象,从而满足所述兴趣。内容对象遵循兴趣的反向路径到所述兴趣的起点。在其它信息之中,内容对象含有相同HSVLI、对象的有效负载以及用以将HSVLI绑定到有效负载的加密信息。
本发明中使用的术语大体上定义如下(但其解释不限于此):
“HSVLI”:分层结构化的可变长度标识符,也称为名称。它是名称组成部分的有序列表,其可以是可变长度八位位组串。使用人可读形式,其可以用例如ccnx:/path/part的格式表示。HSVLI也可以是人不可读的。如上所述,HSVLI指代内容,且需要HSVLI能够表示用于内容的有组织结构且至少部分对人有意义。HSVLI的个别组成部分可具有任意长度。此外,HSVLI可以具有明确定界的组成部分,可以包含任何字节序列,且不限于人可读字符。最长前缀匹配查找在转发具有HSVLI的包时是重要的。例如,指示对“/parc/home/bob”的兴趣的HSVLI将匹配“/parc/home/bob/test.txt”和“/parc/home/bob/bar.txt”两者。在名称组成部分的数目方面,最长匹配被视为最佳的,因为它是最特定的。HSVLI的详细描述可以在由发明人范·L·雅各布森(Van L.Jacobson)和詹姆斯·D·桑顿(James D.Thornton)在2009年9月23日递交的发明名称为“用于转发具有分层结构化的可变长度标识符的包的系统(SYSTEM FOR FORWARDING A PACKET WITH A HIERARCHICALLY STRUCTURED VARIABLE-LENGTH IDENTIFIER)”的第8,160,069号美国专利(代理人案号PARC-20090115Q)中找到。
“兴趣”:对内容对象的请求。兴趣指定HSVLI名称前缀和其它任选的选择器,所述选择器可用以在具有相同名称前缀的多个对象当中进行挑选。其名称与兴趣名称前缀(以及任选地其它所请求的参数,例如公布者密钥-ID匹配)匹配的任何内容对象都满足所述兴趣。
“内容对象”:响应于兴趣而发送的数据对象。其具有经由加密签名而绑定在一起的HSVLI名称和内容有效负载。任选地,所有内容对象具有由内容对象的SHA-256摘要组成的隐式终端名称组成部分。在一个实施例中,隐式摘要不在线上传送,而是在需要时在每一跃点处计算。应注意,内容对象与内容组成部分或内容块不同。内容对象具有在CCN方案下的具体界定的结构并且其大小通常是网络包的大小(对于广域网约1500字节、对于局域网约8000字节,并且具有碎片),而内容组成部分是用于指代任何类型文件的一般术语,其可以是网页的内嵌对象。例如,网页可以包含多种内嵌对象,例如图像、视频文件或交互组成部分。每一内嵌对象是内容组成部分或内容块并且可以跨越多个内容对象。
如之前所提及,HSVLI指示一条内容,是分层结构化的,且包含从最一般层级到最特定层级排序的连续组成部分。相应HSVLI的长度是不固定的。在内容中心网络中,不同于常规IP网络,包可以通过HSVLI来识别。例如,“abcd/bob/papers/ccn/news”可以是内容的名称且识别对应包,即,在名为“ABCD”的组织处针对名为“Bob”的用户的来自“ccn”论文集合的“news”文章。为了请求一条内容,节点通过内容的名称来表达(例如,广播)对所述内容的兴趣。对一条内容的兴趣可以是根据所述内容的名称或标识符对所述内容的查询。内容如果在网络中是可用的,则从存储内容的任何节点将所述内容发回到请求节点。路由基础结构将兴趣智能地传播到很可能具有所述信息的预期节点,且随后沿着所述兴趣消息穿越的反向路径携载可用的内容返回。基本上,内容对象遵循兴趣消息留下的路径记录,并且因而到达请求节点。
图1图解说明根据本发明的实施例的网络的示例性架构。在此实例中,网络180包括节点100到145。网络中的每一节点耦合到一或多个其它节点。网络连接185是此类连接的实例。网络连接展示为实线,但每一线也可以表示可将一个节点耦合到另一节点的子网或超网。网络180可以是内容中心的本地网、超网或子网。这些网络中的每一者可经互连以使得一个网络中的节点可以到达其它网络中的节点。网络连接可以是宽带、无线、电话、卫星或任何类型的网络连接。节点可以是计算机系统、终端表示用户和/或可以产生兴趣或发起内容的装置。
根据本发明的实施例,消费者可以产生对一条内容的兴趣且将所述兴趣转发到网络180中的节点。所述条内容可以由可位于网络内部或外部的公布者或内容提供者存储在网络180中的节点处。例如,在图1中,对一条内容的兴趣起源于节点105处。如果所述内容在所述节点处不可用,那么所述兴趣流动到耦合到第一节点的一或多个节点。例如,在图1中,兴趣流动(兴趣流150)到并不具有可用的所述内容的节点115。接着,兴趣从节点115流动(兴趣流155)到同样不具有所述内容的节点125。随后兴趣流动(兴趣流160)到确实具有可用的所述内容的节点130。内容对象的流随后反向地回溯其路径(内容流165、170和175)直到其到达节点105为止,在所述节点处投递所述内容。在所述内容流中可涉及例如验证等其它过程。
在网络180中,在内容持有者(节点130)与兴趣产生节点(节点105)之间的路径中的任何数目的中间节点(节点100到145)可以参与在内容在网络上行进时高速缓冲存储所述内容的本地副本。高速缓冲存储通过隐式地共享对本地高速缓冲存储内容的存取而减少对位于接近其它订户处的第二订户的网络负载。
在CCN中,清单(有时称为安全目录或聚合签名对象)用以表示数据的集合或单一条数据。例如,CCN节点可以含有包含大量视频文件的视频集合,并且视频集合的清单可以是识别对应于视频文件的内容对象的有序列表。替代地,每一视频文件可以具有其自身的清单,所述清单包含识别对应于特定视频文件的内容对象的有序列表。应注意,由于内容对象的大小界限,因此视频文件通常跨越许多内容对象。
在清单中,每一内容对象通过其名称和对应摘要来识别,其中摘要是所述内容对象的散列值(通常使用例如散列函数SHA-256等加密散列函数计算得出)。在一些实施例中,每一内容对象还通过经修改时间来识别,所述经修改时间指示最后修改内容的时间。图2呈现图解说明清单格式的简图。
在图2中,清单200包含通过集合名称204和以下中的一或多者识别的内容对象的有序列表:内容对象名称230.1到230.n;摘要232.1到232.n;以及经修改时间234.1到234.n。摘要232.1到232.n包含通过名称230.1到230.n相应地识别的内容对象的散列值。
如图2中所示,清单200可以指示在集合中展现的每一内容对象的名称和对应摘要。应注意,表示文件的不同信息块的内容对象可以具有相同的基本名称但是不同的信息块编号。图2中还示出,清单200也可以包含在集合中展现的每一内容对象的经修改时间。经修改时间字段的使用取决于基础应用或所执行的服务。此外,除有序列表之外,清单也可以构造为同步树,其含有内容对象以及嵌套的内容对象的集合。
在一些实施例中,清单可以是其有效负载是良好构造结构的经签名内容对象,其可以经过JSON(JavaScript对象符号)或TLV(类型长度值)编码。
为了减少在文件更新情况下不必要的数据传送的量,本发明的实施例实施基于差异的内容联网(DBCN)。更确切地说,DBCN使用版本之间的差异以减少数据传送的量,使得当公布者公布新版本的内容块时,系统可以仅需要公布所述差异而不是公布整个经更新内容块。例如,当用户更新具有1KB(千字节)更改的10MB(百万字节)视频文件时,系统将最新经更新文件编码为原始10MB文件和1KB差异文件的组合。任何已经具有10MB原始文件的远程用户现在仅需要下载1KB差异文件,并且能够使用1KB差异文件和10MB原始文件中包含的信息来构建经更新文件。
类似于其它版本化文件系统,在DBCN中,存在原始内容块或文件的真实数据以及一系列差异。在某一时刻,可以写入新的真实数据以避免需要大量差异。取决于实施方案,不同DBCN系统可以具有写入新的真实数据或合并差异以优化内容传送的不同策略。
为了确保内容的安全和有效分布,CCN有时使用聚合签名。更确切地说,公布者可以将加密签名限制到也称为安全目录或清单的聚合签名对象(ASO),而不是对每一以及各个内容对象进行签名。DBCN使用清单(或安全目录)以有效地对版本差异进行编码。在一些实施例中,DBCN通过在当前版本的清单中引用早期版本的清单,且随后指示两个版本之间的差异来对版本差异进行编码。因此,接收者可以下载新版本的清单,使用所述清单中包含的信息以(或者从其本地高速缓冲存储器或者内容提供者中)获得前一版本,并且随后将所述差异应用到前一版本。版本差异可以许多不同方式进行编码,包含但不限于:字节范围指示、字节偏移量指示、基于序列号的内容对象指示,基于自校验名称的内容对象指示、以及清单差异。对于字节范围指示实施方案,系统识别差异的字节范围,并且在较新版本的清单中包含所识别的字节范围和对应的新字节。对于字节偏移量指示实施方案,每一内容对象通过其字节偏移量进行标记;并且较新版本的清单引用通过其字节偏移量标记的差异内容对象,从而指示将差异内容对象放置在前一版本中的何处。对于内容对象指示,系统识别经修改内容对象的序列号,并且在较新版本的清单中包含所识别的内容对象序列号和新的内容对象。对于基于内容对象的自校验名称的实施方案,每一版本的清单列出每一内容对象的自校验名称(散列);并且那些自校验名称之间的差异指示版本差异。对于清单差异实施方案,清单自身经过差异编码。
图3呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。在图3中,数据文件306(其可以表示任何类型的内容,例如二进制、文本、图像、视频、音频等)可以分割成多个信息块,并且每一信息块使得有效负载为CCN内容对象。在图3中所示的实例中,一组内容对象304包含八个内容对象,共同地对应于数据文件306,所述数据文件可以是文本文献(paper.doc)。在一些实施例中,数据文件306被分割成相同大小的信息块,其中每一信息块放入标准的内容对象中。在一些实施例中,系统可以使用重复数据删除技术以将数据文件306分解成信息块,使得每一内容对象的有效负载是重复数据删除算法的输出。应注意,取决于数据以及所使用的重复数据删除技术,信息块大小可以在从1500字节到64KB的范围内变化。应注意,如果使用较大的信息块大小,那么系统可能需要网内碎片。因此,如果存在高丢包率,那么较大的信息块大小是不太合乎需要的。
在图3中所示的实例中,如同常规CCN系统,每一内容对象以其序列号命名。更确切地说,内容对象具有相同的CCN基本名称,后接版本编号,接着后接序列号。例如,第一内容对象可以具有如“/abc/paper.doc/v0/s0”的CCN名称,其中“/abc/paper.doc”是CCN基本名称,v0指示版本0,且s0指示此内容对象是第一信息块。
为了实现DBCN,在一些实施例中,系统产生用于内容对象组304的清单302。清单302的名称可以是CCN基本名称,例如“/abc/paper.doc/v0”,其中v0指示此清单是第一版本的清单。在CCN中,每一内容对象具有隐式内容对象散列,其可以是内容对象的SHA-256散列。产生内容对象散列允许以所检索内容对象是所需内容对象的加密验证精确检索匹配内容对象。在一些实施例中,清单302依序列举每一构成内容对象的内容对象散列。因此,节点可以通过请求可包含一或多个内容对象散列的清单302来请求数据文件306。一旦节点下载清单302,它就可以个别地基于其内容对象散列检索每一内容对象。此外,如果清单302包含公布者产生的签名,那么接收节点可以通过校验清单302的签名来验证所有所检索的内容对象。
当公布者通过在区段308和310处进行更改而更新数据文件306时,公布者产生一组差异内容对象314以及针对所产生的差异内容对象的更新清单312(可以具有名称“/abc/paper.doc/v1”)。接着,公布者可以通过公布更新清单312以及差异内容对象组314来公布新的版本。在一些实施例中,差异内容对象组314包含从版本0到版本1的结构化二进制差异列表,使得可以“修补”早期版本以获得较新版本。应注意,此处术语“二进制差异”意味着测量差异的字节位置并且指示取代旧字节的新字节(其可以比原始字节更多或更少)。对于基于文本的数据,系统可以使用标准的文本差异。在一些实施例中,差异内容对象组314包含更改(例如区段308和310)的字节范围信息以及用以取代由字节范围指定的旧字节的新字节。例如,区段308可以从5K字节位置开始并且在6K字节位置处结束,从而指示1K数据的更改。因此,差异内容对象组314包含指定5K到6K字节范围的条目以及将在数据文件306中的5K与6K字节位置之间插入的任何字节。取决于所发生的更改的量,差异内容对象组314可以包含一或多个内容对象。应注意,这些差异内容对象可以具有依序的名称,例如“/abc/paper.doc/v1/s0”和“/abc/paper.doc/v1/s1”,其中v1指示版本1且s0/s1指示每一差异内容对象的信息块序号。在图3中所示的实例中,版本之间的二进制差异包含在一个内容对象中。
在一些实施例中,更新清单列举差异内容对象的内容对象散列,使得仅对更新清单进行签名就能实现所有差异内容对象的验证。
如同常规清单,更新清单312包含对其构成内容对象的引用,所述构成内容对象包含差异内容对象组314。此外,更新清单312包含对原始清单302的引用。因此,如果节点在其高速缓冲存储器中已经具有早期版本文件,那么其仅需要下载更新,意味着下载更新清单312和差异内容对象组314。基于更新清单312中包含的信息,节点可以定位原始清单302以及由此内容对象组304,并且接着将差异内容对象组314中包含的差异应用到原始内容对象组304以获得较新版本文件。如果节点不具有早期版本文件,那么其可以首先使用原始清单302检索早期文件并且接着应用差异。
此字节范围指示方案的优点是差异内容对象仅含有差异字节以及描述那些差异出现在前一版本中的何处的标注。在差异内容对象中不包含另外的经复制数据。然而,如果存在许多不连续的更改,那么开销的量会高。应注意,如果更改包含字节插入,那么它们可以引起内容对象的右移。另一方面,对于删除操作,可以使用单个空内容对象容易地省略这些字节。
图4呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。如同图3,在图4中,数据文件406被分解成构成一组内容对象404的有效负载的许多信息块。然而,与图3不同,在图4中所示的实例中,内容对象组404不以序列号命名,替代地,它们以其字节偏移量命名。换句话说,内容对象基于其第一字节的字节位置命名。例如,第一内容对象具有零字节偏移量,并且其CCN名称可以是“/abc/paper.doc/v0/0K”。在图4中,清单402类似于清单302,并且其包含内容对象组404的内容对象散列列表。
如同图3中的清单312,更新清单412(“/abc/paper.com/v1”)引用原始清单402和一组差异内容对象414。然而,与图3中其中差异内容对象以它们的信息块编号进行命名不同,在图4中,差异内容对象以它们的字节偏移量命名,字节偏移量指示每一差异内容对象中包含的字节应放置于前一版本中的何处。例如,在图4中,更改出现在数据文件406中的区段408处,且对于区段408的字节偏移量是5KB。因此,含有将在数据文件406的5KB位置处插入的字节的差异内容对象将命名为“/abc/paper.doc/v1/5K”,其中v1指示版本1且5kB指示通过此内容对象携载的字节的字节偏移量。类似地,含有将在数据文件406中的17KB位置(区段410)处插入的字节的内容对象可以命名为“/abc/paper.doc/v1/17K”。在一些实施例中,每一差异内容对象的有效负载还包含指示差异内容对象是否代表“插入”或“取代”或“删除”操作的信息。可容易地理解的是,对于“删除”操作,对应内容对象可以为空。
在图4中所示的实例中,较新版本文件的构建过程类似于图3中所示的构建过程。在一些实施例中,当存在多个共存版本时,节点可以通过执行清单树的后序遍历且维持数据文件的区间图来构建版本。此文件构造过程可能是复杂的,因为每次需要从一个版本的紧邻的前一版本来构建所述版本。当版本的数目较大时,这可能是繁琐的过程。
图5呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。如同图3中所示的,在图5中,数据文件506被分解成构成一组内容对象504的有效负载的许多信息块,且这些内容对象以它们的信息块编号命名。还如同图3中所示的清单302,清单502包含内容对象组504的内容对象散列列表。如同图3中所示的清单312,更新清单512(“/abc/paper.com/v1”)引用原始清单502和一组差异内容对象514。然而,与图3中所示的不同,在图5中,差异内容对象组514不包含更改的字节范围信息。替代地,差异内容对象组514包含可以用来调换旧文件中的经修改内容对象的内容对象。更确切地说,如果在特定内容对象处出现更改,那么公布者产生可以用来取代原始内容对象的新的内容对象。在图5中所示的实例中,在区段508处出现一个更改,其对应于具有序列号1的内容对象(信息块1);并且在区段510处出现另一更改,其对应于信息块4。因此,当更新数据文件506时,公布者产生两个差异内容对象,其可以用来取代前一版本的信息块1和4。应注意,差异内容对象以它们意欲取代的内容对象的信息块编号命名。
当存在许多共存版本时,节点可以通过执行清单树的后序遍历来构建版本,并且仅使用最右边出现的内容对象序列号。
因为不需要计算字节范围,所以此基于内容对象序列号的差异编码机制可以容易实施。此外,构建不同版本的文件可以更容易,因为仅需要知道在内容对象层级处的版本之间的差异。然而,因为所述差异现在在内容对象层级处进行编码,所以每一内容对象需要含有取代前一内容对象的所有字节,这可能产生不必要的数据复制。例如,即使在内容对象中仅更改少量字节(例如,128字节),其可以是8KB大,但是新版本中的所有8KB字节将需要被包含在替代内容对象中。这可引起大致7.9KB的经复制数据。
图6呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。在图6中,数据文件606被分解成构成一组内容对象604的有效负载的许多信息块。在一些实施例中,所述信息块可以是重复数据删除机制的输出,且可以具有介于4KB到16KB范围内的变化的大小。然而,与图3不同,在图6中所示的实例中,内容对象组604不以它们的序列号命名,替代地,它们给定自校验的基于散列的名称。换句话说,每一内容对象通过其加密散列命名。应注意,在图6中所示的实例中,为易于显示,缩短了散列值。在实践中,它们包含长得多(例如32字节)的字符串。在一些实施例中,每一内容对象以其SHA-256摘要命名。在一些实施例中,由于它们的唯一性,用于相同内容块的内容对象保持在相同名称空间下,使得内容对象可以命名为“/abc/paper.doc/<chunk_hash>”。应注意,没有提及版本编号,且来自所有不同版本的信息块保持在相同名称空间下。在不同实施例中,所有信息块可以保持在更高层级信息块存储库下,例如“/abc/<chunk_hash>”。
如同图3中所示的清单302,清单602依序列举内容对象组604的内容对象散列。尽管信息块名称未经版本化,但是清单602给定版本化名称,例如“/abc/paper.doc/v0”,其中v0指示版本0。应注意,清单602中的条目仅需要引用内容对象到查找它们所需的程度。例如,如果系统将所述信息块存储在“/abc/paper.doc”下,那么清单602可以在一个位置(例如,用于第一信息块的条目)中表明此;接着剩余的条目仅是32字节的散列名称。
当公布者通过在区段608和610处进行更改而更新数据文件606时,公布者产生经更新文件的新的内容对象组。新的内容对象组包含原始内容对象组604中的所有未更改的内容对象以及一组差异内容对象614。应注意,如先前论述,所有内容对象都放置在相同名称空间下,而不提及版本编号。公布者还产生新的内容对象组的清单612(/abc/paper.doc/v1)。如同清单602,清单612列举新的内容对象组的内容对象散列,其包含未更改的内容对象的散列(例如A1B、08D、117、C7E、295和093)以及差异内容对象的散列(例如ABD和772)。应注意,与图3到5中所示的方案不同,在当前方案中,清单612直接引用早期版本的未更改的内容对象,而不是引用早期版本清单。已经具有原始内容对象组604的接收节点可以下载清单612和差异内容对象组614。因为清单612依序列举内容对象散列,所以接收节点可以通过将差异内容对象放置到适当位置中来构建较新版本文件。对于不具有原始内容对象组604的节点,其可以使用清单612中包含的内容对象散列来下载整个新的内容对象组。
此基于散列名称的方案的优点是较新版本的清单不再需要引用早期版本的清单。然而,清单自身变得更大,因为它需要列举所有信息块的内容对象散列。
图7呈现图解说明根据本发明实施例的示例性的基于差异的数据编码方案的简图。如同图6中所示的实例,在图7中,数据文件706被分解成构成一组内容对象704的有效负载的许多信息块。还如同图6中所示的实例,内容对象以它们的加密散列名称命名。如同图6中所示的清单602,清单702(/abc/paper.doc/v0)依序列举内容对象组704的内容对象散列。应注意,内容对象的内容对象散列可以包含内容对象的SHA-256散列。
如同图6中所示的实例,当公布者通过在区段708和710处进行更改而更新数据文件706时,公布者产生经更新文件的新的内容对象组。新的内容对象组包含原始内容对象组704中的未更改的内容对象以及一组差异内容对象714。然而,与图6不同,公布者现在产生与清单612不同的更新清单712。更确切地说,更新清单712自身通过包含与原始清单702的差异以及对原始清单702的引用而经过差异编码。换句话说,更新清单712可以指定如何对原始清单702进行更改,而不是列举新的组中用于所有内容对象的内容对象散列。例如,更新清单712可以表明内容对象散列4FF和5DA(对应于区段708和710)的删除以及内容对象散列ABD和772(对应于差异内容对象组714)的插入。应注意,可以使用各种差异编码方案(其可以类似于图3到6中所示的方案)来产生更新清单712。
为了构建经更新数据文件,接收节点首先下载引用原始清单702和差异内容对象组714的更新清单712。接着,接收节点下载原始清单(如果接收节点不具有原始清单)和差异内容对象组714。随后,基于更新清单712和原始清单702,接收节点可以构建新的清单(图7中未示出),其类似于清单602并且列举表示经更新数据文件的内容对象的内容对象散列。基于新的清单,接收节点可以通过将差异内容对象放置到早期版本文件的适当位置中来构建较新版本文件。在一些实施例中,接收节点可以跳过新清单的构建,并且基于更新清单712中包含的信息来推断如何布置差异内容对象。
使用经过差异编码的更新清单的优点是其确保后续版本的清单保持紧凑,这反过来可以大大减少当出现内容更新时将需要在网络上传送的数据的量。此外,如同图6中所示的实例,列举内容对象散列允许易于插入或移除信息块。
在一些实施例中,清单702可以是分层的并且包含多个分层段。在此类情形中,更新清单712可以通过引用结合原始清单702的分层结构的未更改的分支,而不需要重新列举那些未更改的分支段。
在图7中所示的实例中,仅存在两个版本。在实践中,相同文件的许多不同版本可以共存。后续版本的更新清单不需要唯一地指向紧邻的前一版本清单。在一些实施例中,后续版本的更新清单可以引用任何数目的早期版本并且指示与那些版本的差异。例如,版本10更新清单可以引用版本4更新清单并且指示在这两个版本之间的差异(以差异内容对象的形式)。在不同实例中,版本10更新清单可以引用版本7更新清单,版本7更新清单又引用版本4更新清单。可以经由清单树的后序遍历来构建用于最终版本文件的清单。
图8呈现图解说明根据本发明实施例实现基于差异的内容投递的示例性内容更新过程的流程图。在操作期间,内容公布者更新内容块,其可以是任何类型的数据文件(操作802)。应注意,因为数据文件已经被分块以放入多个内容对象中,所以更新数据文件通常包括更新内容对象的子集而留下剩余的内容对象不更改。取决于DBCN方案,在一些实施例中,内容对象根据它们的序列号命名。在一些实施例中,内容对象根据每一内容对象的字节偏移量命名。在一些实施例中,内容对象基于它们的加密散列名称命名。
接着,公布者基于所述更新产生一组差异内容对象(操作804)。应注意,取决于DBCN方案,在一些实施例中,产生差异内容对象可以包括选取差异的字节位置,其可以是插入、删除或取代操作的结果。还取决于DBCN方案,差异内容对象可以基于它们的序列号、将被取代的内容对象的序列号、差异的字节偏移量或差异内容对象的加密散列名称来命名。对于字节层级的差异编码,差异内容对象可以仅含有两个版本之间的差异字节。然而,需要指定差异的字节位置或范围。用于内容对象层级的差异编码,差异内容对象需要含有用以取代前一内容对象的所有字节。差异内容对象的位置可以它们的名称编码为或者它们的字节偏移量或者为将被取代的信息块的序列号。
随后,公布者产生差异内容对象的更新清单(操作806)。更新清单通常引用前一版本清单和差异内容对象。唯一区别在于,当更新清单列举整个新内容对象组(包含未更改的内容对象)的加密散列时,更新清单不再需要明确引用前一版本清单。公布者将更新清单和/或差异内容对象放置在用于较新版本的名称空间下(操作808),使得尝试下载较新版本文件的节点可以下载更新清单并且接着使用所述更新清单来获取所需内容对象。应注意,如果节点在其高速缓冲存储器中已经具有早期版本文件,那么它仅需要下载差异内容对象。
图9呈现图解说明根据本发明实施例的下载和构建经更新内容块的示例性过程的流程图。在操作期间,节点通过在较新版本的名称空间下发布初始兴趣组(操作902)开始下载内容块的经更新版本。作为回应,节点接收更新清单(操作904)。在一些实施例中,更新清单包含对前一版本清单的引用并且引用一组差异内容对象。在一些实施例中,更新清单包含对前一版本清单的引用并且指示与前一版本清单的差异。在一些实施例中,对更新清单以加密方式进行签名使得其签名的校验验证所有后续差异内容对象。节点确定其是否具有前一版本清单(操作906)。如果否,那么节点下载前一版本清单以及任选地还有对应于前一版本的内容对象(操作908)。应注意,如果内容对象使用基于散列的名称且所述清单列举所有内容对象散列,那么节点可以延迟早期版本内容对象的下载。接着,节点任选地将差异应用到更新清单以获得清单(操作910)。应注意,这仅适用于经过差异编码的清单。节点随后下载差异内容对象(操作912),并且将差异应用到前一版本内容对象(操作914)。在一些实施例中,应用所述差异包括在(如通过差异内容对象指定的)特定字节范围处进行更改。在一些实施例中,应用所述差异包括用差异内容对象(对于删除操作其可以为空)取代某些内容对象。在一些实施例中,应用所述差异可以包括下载未更改的内容对象(如果其在本地高速缓冲存储器中不具有所述未更改的内容对象)以及差异内容对象,其中差异内容对象放置在合适位置处。
图10图解说明根据本发明实施例的实现基于差异的内容联网的示例性系统。DBCN系统1000包括处理器1010、存储器1020以及存储装置1030。存储装置1030通常存储可以被加载到存储器1020中且通过处理器1010执行以实施上述方法的指令。在一个实施例中,存储装置1030中的指令可以实施内容更新模块1032、差异内容对象产生/接收模块1034、更新清单产生/接收模块1036以及版本构建模块1038,所有所述模块可以通过各种装置与彼此通信。
在一些实施例中,模块1032、1034、1036和1038可以部分地或完全地以硬件实施且可以是处理器1010的一部分。此外,在一些实施例中,所述系统可不包含单独的处理器和存储器。实际上,除执行其特定任务之外,模块1032、1034、1036和1038或单独地或协同地可以是通用或专用计算引擎的一部分。
存储装置1030存储将通过处理器1010执行的程序。具体来说,存储装置1030存储用以实施用于实现DBCN的系统(应用)的程序。在操作期间,应用程序可以从存储装置1030加载到存储器1020中并且通过处理器1010执行。因此,DBCN系统1000可以执行上文所描述的功能。DBCN系统1000可以耦合到任选的显示器1080(其可以是触摸屏显示器)、键盘1060和指向装置1070,并且还可以经由一或多个网络接口耦合到网络1082。
此具体实施方式中所描述的数据结构和代码通常存储在计算机可读存储媒体上,所述计算机可读存储媒体可以是能存储由计算机系统使用的代码和/或数据的任何装置或媒体。计算机可读存储媒体包含但不限于易失性存储器、非易失性存储器、磁性以及光学存储装置,例如磁盘驱动器、磁带、CD(光盘)、DVD(数字通用光盘或数字视频光盘)、或能够存储目前已知或稍后开发的计算机可读媒体的其它媒体。
在具体实施方式部分中所描述的方法和过程可以代码和/或数据形式实施,代码和/或数据可以存储于如上文所描述的计算机可读存储媒体中。当计算机系统读取并执行存储于计算机可读存储媒体上的代码和/或数据时,计算机系统执行以数据结构和代码形式实施且存储在计算机可读存储媒体内的方法和过程。
此外,本文中所描述的方法和过程可以包含在硬件模块或设备中。这些模块或设备可以包含但不限于专用集成电路(ASIC)芯片、现场可编程门阵列(FPGA)、在特定时间执行特定软件模块或一段代码的专用处理器或共用处理器、和/或目前已知或稍后开发的其它可编程逻辑装置。当启动硬件模块或设备时,这些硬件模块或设备执行其内部所包含的方法和过程。