云存储的相似多文件差异分析现在在工程界是啥进展

关于楼上提到的交叉文件差异分析和动态分片等方式,坚果云都进行过非常深入的思考和仔细的研究。固定分块的数据去重(de-duplication)其他朋友的回答中,采用固定分块比较的方式,这是数据去重的第一个阶段。利用哈希树算法(Merkle Tree)【1】,计算分块的特征值。如果分块已经存储在系统中,无需再次存储,直接进行交叉引用。 减少存储空间和加快上传速度。这个方式几乎所有的云存储服务商都提供,包括坚果云。这个方式对于不太修改的文件,尤其是照片视频等多媒体文件效果很好。但是它有一个致命的缺点,一旦在文件中的开始增加或者删除一个比特,整个文件的分块情况会完全变化,大量的数据重复将无法检测,因此其不适用于数据经常修改的场合,比如办公文档和设计文档等。不过,目前大多服务(包括dropbox)都只用了简单的hash检测重复的分块,这在数据隐私性上有一定的漏洞。这个问题比较复杂,如果环境允许,我们可能在坚果云的博客【2】上适度的披露更多信息和解决办法。单个文件不同版本之间的数据去重这是数据去重的第二个阶段。这个办法主要是利用某种形式的滑动窗口动态检测数据分块的边界,从而除了能够检测到固定的重复分块外。也可以避免因为上述的数据插入或者删除导致的算法失效。上面提到的rsync【3】算法其实也使用了类似的思想。这类型的算法有个好处,完全可以通过客户端本地匹配,节约服务器的计算和IO资源。Dropbox和坚果云都在产品发布的开始用了类似的手段,这也是经常提到的“增量同步”的一个形式。国内的其他厂商最近也在逐步采用这个方法,或许某天,它应该是云存储产品的一个必备功能。不同文件之间的数据去重这是数据去重的第三个阶段。不同文件的数据去重,总体上类似上面的第二个阶段,在不同文件中利用某种滑动窗口算法动态将数据分块,然后利用第一种方式的hash算法,在服务器上查询重复分块。这个方法有个大问题:1)窗口滑动的时候有一个假设,假定目标数据是完全随机的,从而保证窗口的设定(分块的大小)也是随机的。如果数据不满足随机性,容易导致分片数目过多或者过少。2)该算法不能通过客户端执行,必须在服务器上执行这个算法的关键是找到合适的手段,控制文件分片后的数目。分片太多容易增大服务器查找重复分片的负担,分片太少容易导致去重的效率下降。坚果云在这个方面也有很好的研究,我们发现,利用这个算法,离线的对某些类型的数据进行处理可以很好的降低存储成本。某些高端的数据归档(data archive)系统,也用了类似的手段对于不经常访问的数据进行去重。【补充】针对提问者在评论中提出的问题:如果需要在上传数据前就根据第三部份的方法消除重复的部分,那么可能需要解决因为分块太多导致的过高的服务器性能开销(在保证去重性能的前提下)。这个很大程度上是一个工程问题,也就是投入产出的问题,而不是能做不能做的问题。如果是后者的话,那么肯定是能做的 :-)【1】http://en.wikipedia.org/wiki/Hash_tree【2】http://blog.jianguoyun.com【3】http://en.wikipedia.org/wiki/Rsync
■网友
1.就你提供的例子:doc文档来说。doc是一个复合文档。复合文档的意义在于 他有自己的文件格式,并不类似于文本文件--你在后续加入的内容一定也只能导致源文件尾部的数据有变化。你对一个doc文档的头或者尾有改动,有可能导致真正文件的2进制数据的任何一个部分有改动。类似的有zip文件等等。2.由于1的原因,所以只有在文件数据分块足够小的情况下才能很优的解决相同文件块服务器只存一份的需求。但是!文件分块越小,服务器上存储的文件元数据的信息越大(每个文件所组成的块数越多),且下载一个文件所需要的网络请求数也会相应增多(考虑到建立http连接甚至https的连接的消耗),所以这里有一个平衡。3.据我所知金山个人快盘的分块大小是4MB。现在来回答你的问题:1.动机 很明显:减少最终服务器数据的存储量。数据量越大,效果越明显。同一个文件块如果被引用了成千上万次,那么节约的存储空间是巨大的。2.我是金山 并且已经采用了文件分块传输的模型,早起采用的模型的算法已经说明了,就是文件分块,单块算hash,新上传的文件分块,然后单块算hash,服务器已经有的块(根据hash值查询)不再次上传,直接做引用。这种模型不需要你所说的两倍空间(我没有看到你的改进算法需要两倍空间的说明)。顺带一提的是,每块数据至少在服务器上有三分冗余:) 。3.那肯定受不了,不过这些对用户都是透明的。其实你想想看,我们提供的服务可以量化的是传输速度和时间,不能量化的是稳定性和安全性和易用性等等。用户回报的价值可以简单用钱来衡量,那么你看,用户付出多少钱,其实不单单是提供的容量所能决定的。4.dropbox有没有做多文件交叉差异检测(假如这个特指你所说的改进后的算法的话)这个事情我不知道,我肯定的是,dropbox一定做了文件分块和单块重用的技术。就算dropbox不做,dropbox的底层存储亚马逊的S3也会做的...国内的你距离的这些,都用了和dropbox差不多的技术。顺带一提,TPAN和KPAN合并了已经..5.附送的消息。EMC平方有一套系统可以动态决定分块大小,这种就需要服务器进行运算了。具体了解不多,你有兴趣的话,我们一起再细聊。


推荐阅读