0%

Dropbox差异同步算法rsync及其改进算法原理

打个比方,你一共在两台电脑上(A,B)用同一个帐号的Dropbox,一共有三个文件(C,D,E),你在A电脑上删了(或者任意操作后保存)C,只要同步,B上面的C就会执行自行同步你在A上对C 的操作。至于Ipad上的同步,原理是一样。

yskin说

eDonkey2000(好吧,就是大家说的电驴)是这样实现的:把文件按固定大小分成几段,然后每段生成一个Hash码,然后再把所有Hash码合并成一个Hash码表,再对其生成一个Hash码,于是就成为了ed2k链接。下载的时候,先拿ed2k链接找人要到Hash码表,然后再根据码表分别下载每个片段。

Dropbox的增量同步也一样,每4M生成一个Hash码,然后更新的时候把码表和隐藏目录里存储的原码表做一下比较,发现1-10、12-20段都没有改变,只有11段不一样了,于是就只上传了第11段的数据。

dunning说

dropbox最初是采用了类似rsync的技术,但后来好像还是采用了Fix Sized Chunk进行。一个10MB的文档我曾经试过,修改1个字基本也有50%~70%左右的部分会被重新上传。

疑问

是否有版本记录功能?跟git什么区别?

是否是增量同步?

如何解决冲突问题?

参考

  • Dropbox的同步方式是怎样的? | v2ex
  • 云存储或笔记的增量同步是如何实现的? | 知乎
  • gist
  • 基于rsync的文件增量同步方案 | 美团
  • 详解rsync算法–如何减少同步文件时的网络传输量