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

Algorithm 什么';这个哈希/缓存/版本控制算法的名称是什么?,algorithm,caching,hash,rabin,Algorithm,Caching,Hash,Rabin,几周前,我在一次演示中看到了它,试图实现它,但失败了,并且忘记了它。但现在我想知道它是如何工作的=) 这是一种高效传输/存储数据的方法。它可以用任何语言工作。这就是(我认为)它所做的: 您有一个非常大的文件(例如网站的整个javascript集合) 将其拆分为48字节的块 散列每个48字节的块(例如MD5) 拆分以0x00结尾的哈希上的块列表 大块(>=1散列)现在应该是不同的大小。有的很大,有的很小 在这些散列之间粘合块(同样:实际数据的大小非常不同) 散列那些块 现在,您有了一个表示大文件当

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

这是一种高效传输/存储数据的方法。它可以用任何语言工作。这就是(我认为)它所做的:

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

  • 将其拆分为48字节的块
  • 散列每个48字节的块(例如MD5)
  • 拆分以0x00结尾的哈希上的块列表
  • 大块(>=1散列)现在应该是不同的大小。有的很大,有的很小
  • 在这些散列之间粘合块(同样:实际数据的大小非常不同)
  • 散列那些块
  • 现在,您有了一个表示大文件当前版本的哈希列表
  • 其思想是,当一段代码在大文件中更改时,只有1或2个哈希值更改。使用新文件,您可以执行上述所有步骤,并且只上载/下载实际更改的部分(块,可通过其哈希识别)。根据更改的代码数量和代码周围块的大小,您永远不需要下载超过4个块。(而不是整个文件。)然后,通信的另一端将用新块替换原始块(相同的算法、相同的功能)

    听起来熟悉吗?他们提到了一个名字,但在上面找不到任何东西。当我尝试构建它时,它就是不起作用,因为如果不更改48字节[1],那么更改[2]后的所有哈希值都是不同的

    如果有人知道这个名字:太好了。如果有人能解释一下:太好了

    更新
    我找到了它所在的演示文稿。它在一个新产品“思洛存储器”中被提到(并被使用):Related:(所以它实际上是微软研究院的!整洁!)

    从第一个链接:

    启用思洛存储器的页面使用此本地 存储为LBFS样式的chunkstore

    在第二个链接(视频)中,好的东西从
    6:30
    开始。现在我已经看过两遍了。。。我还是不明白=)


    关键词是
    Delta编码
    Rabin指纹

    这听起来。。。有点比如远程差分压缩的工作原理

    在低带宽文件系统中 (LBFS)[24],使用RDC协议 优化双方的沟通 一个发送者和一个接收者 双方都细分了各自的业务 将文件分成块并进行强计算 每种类型的校验和或签名 大块当客户端需要访问 或者从服务器复制一个文件 后者首先发送一个列表 将该文件的签名发送到 客户端,该客户端决定其 旧块可用于重建 新文件,并请求 缺少块。关键是 协议是文件 在客户机上独立划分 和服务器,通过确定块 数据要素的边界


    这听起来很像。

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

    如果在文件开头插入一个字节,所有哈希值都会更改,则很可能会记住一些错误的细节。可能是你应该对每一次48字节而不是块的运行进行散列。是的,我知道=)这就是我被卡住的地方!但是每运行48个字节的散列就是散列文件大小(字节数为47)的倍。(如果不是1000个中的100个,那就是10个!)那不可能。那就不值得了!?听起来确实有点像。我记得(但我不记得)一个更具异国情调的名字。。。我正在寻找它的演示文稿。+1表示
    滚动哈希
    rsync
    =)这可能就是它们的意思。不过对我来说好像有很多工作要做。。。