Skip to content

用于提取文件间差异数据,并且用于在两个端点之间进行差异化的文件同步。核心采用 rsync 算法,并且支持多轮同步以及就地构造文件。

License

Notifications You must be signed in to change notification settings

lipengyu/xdeltalib

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

xdeltalib

Xdeltalib 是用 C++ 实现的差异数据提取库,其核心就是 Rsync 的算法以及文件相似性计算算法。用于提取文件间差异数据,或者计算文件之间的相似性,并且可用于在两个端点之间进行差异化的文件同步,有一个压缩工具称为 xdelta,但是其所使用的算法原理跟本库完全不同。Xdeltalib 库的特点有如下几个:

* 完全用 C++ 写成,可以集中到 C++ 项目中,并充分利用 C++ 的优势。  
* 支持多平台,在 Windows 与 Linux 中经过严格测试,也可以整合到 Unix 平台中。
* 代码经过特别优化,差异算法及数据结构经过精心设计,增强了执行性能。
* 支持 in-place 同步算法,可以应用到各种平台中,包括移动平台、服务器环境以及 PC 环境。
* 支持可配置的 multi-round (多轮)同步算法,提高同步效率,同时提高了集成平台的可配置性。
* 集成网络数据传输功能,减少了用户整合的工作量,加快整合进度。
* 支持可配置的或者默认的线程数,充分利用多核优势,提高了执行性能。
* 采用消费者与生产者模型提交与处理任务,充分利用并发优势。
* 一库多用途,即可用于传统的文件数据同步,也可用于其他差异算法可应用的场景,如文件相似检查,以及大数据分析。
* 良好的平台适应性。通过特别的设计,提供在各种存储平台的应用,如单设备环境,云存储环境,以及分存式存储环境。
* 完备的文档、支持与快速响应。

xdeltalib 可应用的范围可包括:

* 传统的差异文件同步。
* 用于云存储平台与移动终端、普通 PC 终端之间的文件同步,可节省大量流量。
* 可以集成于存储平台之间,用于存储设备之间的数据同步。
* 可以用于在特定存储设备的重复数据删除。
* 文件相似性检查。
* 计算机调查取证。
* 存储系统中大数据分析。
* 云计算平台数据分析。
* 移动平台数据处理。
* 等等。

xdeltalib 的目标

xdeltalib 的目标是提供一个灵活、轻量的 C++ rsync 同步算法库,同时提供各种有用的文件相似性计算与检查的接口。虽然很多的模块可以为 xdeltalib 提供成熟,稳定的实现,如网络通信的 ACE,boost 库以及各种多线程库。但是为了保证项目的轻量,以及集成的方便,我们宁愿放弃这些库,因为他们太重了。同时也为了能够方便在各种平台中运行,过多的库依赖,会使得移植工作非常困难。 这个库可以应用的场景包括,分布式存储中的文件同步、计算机调查取证、计算机存储系统数据分析、甚至用于存储数据的去重等需要对数据大量分析的场景,并且需要相应的性能支持。xdeltalib 则在这样的场景中可能有非常重要的作用。

xdeltalib 的代码协议

我们采用 GPL v2.0 来发布我们的代码。你应该手头有一份这样的协议,如果没有,你可以写信到这里获取:Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA。 如果你需要在你的项目中集成本库,请确认你的项目符合 GPL 协议。如果你需要在商业产品中集成,请写信到:yeyouqun@163.com。 在本库中,大部份的代码是由作者编写,但是也有些代码是从公共的空间获取的,他们有自己的协议。作者尽量保持这些代码所使用的协议是与 GPL 协议兼容的(如数据摘要计算代码等),我们保留了原来代码的协议声明。他们中基本使用 BSD 2-Clause 协议方式授权代码,或者直接使用了 GPL 的授权方式。

关于 xdeltalib logo

文件 xdelta.png 是 xdeltalib 的专用图标,任何人不得在未经许可的情况下,使用在商业产品中,但是可以用于符合 GPL 协议的源代码或者产品,但是必须说明图标的来源。图标的所有人为项目的作者,即 yeyouqun@163.com

xdeltalib 概念的澄清

在本库中,所使用到的同步模式为:

1. 如果要将某个源文件的内容同步到目的地,即在目的地上创建一个等待进程;
2. 源文件端将所要处理的任务(文件)依次提交到本地的处理线程中,多个线程会依次从提交的任务提取并处理完成。
3. 如果处理完成,则源文件端退出,此时,目的地端的进程也会退出。

因此,我们将这个模式中源文件端称为客户端,而目标等称为服务器端。具体的使用,主参考 testserver.cpp 以及 testclient.cpp 示例。使用者也可以只使用部分代码,而利用自己的实现方式。

关于本库的参考论文:

项目参与者可以参考如下论文:

1. Efficient Algorithms for Sorting and Synchronization,Andrew Tridgell, A thesis submitted for the degree of Doctor of Philosophy at The Australian National University,February 1999。
2. In-Place Rsync: File Synchronization for Mobile and Wireless Devices,David Rasch and Randal Burns Department of Computer Science Johns Hopkins University {frasch,randalg}@cs.jhu.edu。
3. J. Langford. Multiround Rsync. Technical Report Available at www.cs.cmu.edu/jcl/research/mrsync/-mrsync.ps, Dept. of Computer Science, Carnegie-Mellon University, 2001.
4. Udi Manber.Finding Similar Files in a Large File System.1993
5. Moses S. Charikar.Similarity Estimation Techniques from Rounding Algorithms.
6. Jesse Kornblum.Identifying almost identical files using context triggered piecewise hashing.2006

About

用于提取文件间差异数据,并且用于在两个端点之间进行差异化的文件同步。核心采用 rsync 算法,并且支持多轮同步以及就地构造文件。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 94.2%
  • C 5.3%
  • Makefile 0.5%