几周前我在演示中看到它,试图实现它,失败并忘记了它。但现在我想知道它是如何工作=)这个哈希/缓存/版本控制算法的名称是什么?
这是一种有效的传输/存储数据的方式。它可以用任何语言工作。这是什么(我认为)它:
你有1个非常大的文件(例如一个网站的整个JavaScript集合)。
- 拆分它的48个字节
- 散列块的48个字节的每个块(例如MD5)
- 分割块上用0x00
- 大块结束散列列表(> = 1散列)现在应该是不同的大小。一些非常大,一些非常小。
- (再次:实际数据非常不同的大小)胶的哈希值之间的块
- 哈希那些块
- 现在你有代表的大文件的当前版本的散列的列表
这个想法是,当大文件中的一段代码发生变化时,只有1或2个散列会发生变化。使用新文件,您可以执行上述所有步骤,并且只上传/下载实际更改的部分(块,可通过其散列识别)。根据代码的变化情况以及该代码周围块的大小,您永远不需要下载超过4个块。 (而不是整个文件)。通信的另一端将用新块代替原始块(相同的算法,相同的功能)。
听起来很熟悉吗?他们提到了一个名字,但是找不到任何东西。当我试图构建它时,它只是不起作用,因为如果你不改变正好48个字节[1],那么在所述改变[2]之后的所有哈希值是不同的...
如果someonw知道名字:很好。如果有人可以解释它:完美!
UPDATE
我发现展示它在它的新产品“筒仓”提到(和使用):http://research.microsoft.com/apps/pubs/default.aspx?id=131524相关:http://channel9.msdn.com/Events/MIX/MIX11/RES04(!所以这实际上是微软研究纯)
从第一环节:
启用仓-A页面链接到本本地 存储作为LBFS式chunkstore。
在第二个链接(视频)中,好东西从6:30
开始。现在我已经看到了两次...我仍然没有得到它=)
关键字是Delta encoding
和Rabin fingerprints
。
如果你在文件的开头插入一个字节,所有散列值都会改变,你很可能会记得一些细节错误。这可能是你应该散列每个48字节而不是块的运行。 – 2011-04-30 16:50:35
是的,我知道=)这就是我卡住了!但是,每次运行48个字节时,散列的次数与文件大小以字节为单位 - 47次相同。(如果不是1000年的100个,那么这个数字就是10)!那不可能。那么它就不值得了!? – Rudie 2011-04-30 17:28:31