Rolling Hash about the Rsync

简介: 今天看文献看到一个有趣的算法—Rolling Hash,这个算法可以更新在不同的machine上的两个“similar”的文件,也叫做rsync algorithm,rsync顾名思义:remote sync,远程镜像同步备份,现在在类Unix的系统已经有该种工具,在此我们只说它涉及的核心算法—Rolling Hash。

      今天看文献看到一个有趣的算法—Rolling Hash,这个算法可以更新在不同的machine上的两个“similar”的文件,也叫做rsync algorithm,rsync顾名思义:remote sync,远程镜像同步备份,现在在类Unix的系统已经有该种工具,在此我们只说它涉及的核心算法—Rolling Hash。今天只做简单的介绍和记录,由于时间的关系和知识结构的不完整,留作以后进一步探讨。

      我们想象一个场景:machine A上有一个文件X,machine B上一个类似的文件Y,说类似而不是相同,是这两个文件只有稍许不同(diffs),两个machine之间有一个low-bandwidth high-latency bi-directional 通信链路,现在要实时更新这两个文件,使之相同,就像云端备份一样,本机的数据改变,也要相应地快速地在云端同步,同时不能消耗太多的能量和通信的开销(traffic overload),我们能想到的办法就是copy,但由于是low-bandwidth,所以会想到compress,在copy,但这样效率是非常低的。而这个算法就是解决这样的一个问题的。它只更新文件改变的部分(diffs),通过将文件划分成等大小的bytes,再通过校验和的方式压缩(有weak和strong两种方式)发送,接受一方再通过循环hash的方式找到不匹配的部分,从而完成整个更新。整个过程有一定复杂性,在此做一点记录,以后有时间在做进一步验证。下面附上部分参考资料:

yanghua的博客:http://blog.csdn.net/yanghua_kobe/article/details/8914970

java源码:https://github.com/yanghua/AlgorithmFactory/blob/master/rollingHash/RollingHash.java

The rsync algorithm:https://cs.anu.edu.au/techreports/1996/TR-CS-96-05.pdf

rsync可用ftp镜像:ftp://samba.anu.edu.au/pub/rsync

目录
相关文章
|
5月前
|
关系型数据库 数据库
Harbor断电重启postgres报错 could not locate a valid checkpoint record
Harbor断电重启postgres报错 could not locate a valid checkpoint record
241 0
未解决:dpkg-source: error: aborting due to unexpected upstream changes, see /tmp/-1.diff.rm5mTN
未解决:dpkg-source: error: aborting due to unexpected upstream changes, see /tmp/-1.diff.rm5mTN
93 0
|
安全 大数据
frequency file /var/lib/ntp/drift/ntp.drift.TEMP: Permission denied 的解决方案
frequency file /var/lib/ntp/drift/ntp.drift.TEMP: Permission denied 的解决方案
212 0
|
关系型数据库 MySQL Docker
Docker - 运行 Mysql 容器后报错:[ERROR] InnoDB: redo log file ‘./ib_logfile0’ exists
Docker - 运行 Mysql 容器后报错:[ERROR] InnoDB: redo log file ‘./ib_logfile0’ exists
547 0
Docker - 运行 Mysql 容器后报错:[ERROR] InnoDB: redo log file ‘./ib_logfile0’ exists
|
开发工具 容器
解决报错:Couldn't create temporary file /tmp/apt.conf.IRqbCz
问题 操作容器应该是属于服务器开发同学的常规操作,经常我们会遇到系统缺少对应的工具的情况,比如我们进入容器后,想使用 vim 修改某个文件,但是发现该容器没有安装 vim 工具。这个时候,一般都需要自己手动安装,比如在 unbuntu 系统中,可以使用 apt-get 包管理命令。
607 0
解决报错:Couldn't create temporary file /tmp/apt.conf.IRqbCz
|
SQL
MySQL:简单记录删除binary log的接口和O_DIRECT不会用到REDO
一、栈帧 #0 my_delete (name=0x7ffff0fa0490 "./binlog.000005", MyFlags=0) at /root/softm/percona-server-5.
872 0