这个哈希/缓存/版本控制算法的名称是什么?

时间:2011-04-30 15:37:31

标签: algorithm caching hash rabin

几个星期前我在一个演示文稿中看到它,试图实现它,失败并忘记了它。但现在我想知道它是如何工作的=)

这是一种有效传输/存储数据的方法。它适用于任何语言。这就是(我认为)它的作用:

你有一个非常大的文件(例如网站的整个javascript集合)。

  1. 将其拆分为48个字节的块
  2. 散列每个48字节的块(例如,MD5)
  3. 拆分以0x00
  4. 结尾的散列上的块列表
  5. 大块(> = 1哈希)现在应该是不同的大小。一些非常大,一些非常小。
  6. 在这些哈希之间粘贴块(再次:实际数据的大小不同)
  7. 哈希那些块
  8. 现在您有一个代表当前版本的大文件的哈希列表
  9. 这个想法是,当一个代码在大文件中发生变化时,只有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 encodingRabin fingerprints

3 个答案:

答案 0 :(得分:3)

这听起来......有点像远程差分压缩的工作方式;

  

在低带宽文件系统中   (LBFS)[24],使用RDC协议   优化之间的沟通   发件人和收件人   双方都细分了他们所有人   文件分块并计算强大   每个的校验和或签名   块。当客户需要访问时   或从服务器复制文件,   后者首先发送清单   该文件的签名   客户端,它决定了它的哪个   旧块可用于重建   新文件,并请求   缺少大块。关键是这个   协议就是文件   在客户端独立划分   和服务器,通过确定块   数据特征的边界。

PDF http://research.microsoft.com/apps/pubs/default.aspx?id=64692

答案 1 :(得分:3)

您可以使用rolling hashes解决“不是块大小的倍数”的问题。这是rsync用于仅传输文件的已更改部分的内容。

答案 2 :(得分:1)

听起来非常像shingling