几个星期前我在一个演示文稿中看到它,试图实现它,失败并忘记了它。但现在我想知道它是如何工作的=)
这是一种有效传输/存储数据的方法。它适用于任何语言。这就是(我认为)它的作用:
你有一个非常大的文件(例如网站的整个javascript集合)。
这个想法是,当一个代码在大文件中发生变化时,只有1或2个哈希值发生变化。使用新文件,您可以执行上述所有步骤,并且只上传/下载已经过行为更改的部分(可通过其哈希标识的块)。根据代码的更改量和代码周围的块大小,您永远不需要下载超过4个块。 (而不是整个文件。)然后,通信的另一端将用新块替换原始块(相同的算法,相同的功能)。
听起来很熟悉?他们提到了一个名字,但却找不到任何名字。当我尝试构建它时,它只是不起作用,因为如果你没有改变48字节[1],那么改变之后的所有哈希[2]都是不同的......
如果有人知道这个名字:太棒了。如果有人能够解释它:完美!
更新
我找到了它所在的演示文稿。它在新产品“Silo”中被提及(并被使用):http://research.microsoft.com/apps/pubs/default.aspx?id=131524相关:http://channel9.msdn.com/Events/MIX/MIX11/RES04(所以它实际上是微软的研究!整洁!)
从第一个链接:
启用Silo的页面使用此本地 存储为LBFS风格的块存储。
在第二个链接(视频)中,好东西从6:30
开始。现在我已经看过两次......我仍然没有得到它=)
关键字为Delta encoding
和Rabin fingerprints
。
答案 0 :(得分:3)
这听起来......有点像远程差分压缩的工作方式;
在低带宽文件系统中 (LBFS)[24],使用RDC协议 优化之间的沟通 发件人和收件人 双方都细分了他们所有人 文件分块并计算强大 每个的校验和或签名 块。当客户需要访问时 或从服务器复制文件, 后者首先发送清单 该文件的签名 客户端,它决定了它的哪个 旧块可用于重建 新文件,并请求 缺少大块。关键是这个 协议就是文件 在客户端独立划分 和服务器,通过确定块 数据特征的边界。
PDF http://research.microsoft.com/apps/pubs/default.aspx?id=64692
答案 1 :(得分:3)
您可以使用rolling hashes解决“不是块大小的倍数”的问题。这是rsync用于仅传输文件的已更改部分的内容。
答案 2 :(得分:1)
听起来非常像shingling。