当前位置:  软件>C/C++软件

网络数据同步开发库 libsync

    来源:    发布时间:2015-01-15

    本文导语:  libsync是一个用于网络数据同步的开发库。 假设现在有两台计算机Alpha和Beta ,计算机Alpha能够访问A文件,计算机Beta能够访问B文件,文件A和B非常相似,计算机Alpha和Beta通过低速网络互联。基于dedupe技术的数据同步算法大致流程...

libsync是一个用于网络数据同步的开发库。

假设现在有两台计算机Alpha和Beta ,计算机Alpha能够访问A文件,计算机Beta能够访问B文件,文件A和B非常相似,计算机Alpha和Beta通过低速网络互联。基于dedupe技术的数据同步算法大致流程与Rsync相似,简单描述如下:
1、Beta采用数据切分算法,如FSP(fixed-size partition)、CDC(content-defined chuking),将文件B分割成大小相等或不等的数据块;
2、Beta对于每一个数据块,计算一个类似rsync弱校验值和md5强校验值,并记录数据块长度len和在文件B中的偏移量offset;
3、Beta将这将数据块信息发送给Alpha;
4、Alpha采用同样的数据块切分技术将文件A切成大小相等或不等的数据块,并与Beta发过来的数据信息进行搜索匹配,生成差异编码信息;
5、Alpha将差异编码信息发送给Beta,并同时发送重构文件A的指令;
6、Beta根据差异编码信息和文件B重构文件A。
上面算法描述中,有几个关键问题需要解决,即文件切分、切分数据块信息描述、差异编码、差异编码信息描述、文件同步。

libsync函数库由提供三个API,原型描述如下:
1、int file_chunk(char src_filename, char chunk_filename, int chunk_algo)
功能:对件进行切分生成分块描述文件。
参数:src_filename为源文件,chunk_filename为生成的块信息描述文件,chunk_algo为文件切分算法,目前支持FSP、CDC、SB三种。

2、int file_delta(char src_filename, char chunk_filename, char delta_filename, int chunk_algo)
功能:使用生成的块描述信息对文件进行差异编码。
参数:src_filename为待编码文件,chunk_filename为通过函数file_chunk生成的块描述文件,chunk_algo为文件切分算法。

3、int file_sync(char src_filename, char delta_filename)
功能:使用差异编码文件将源文件同步至目标文件。
参数:src_filename为基本文件,delta_filename为通过函数file_delta生成的差异编码文件。

数据同步有PULL和PUSH两种应用模式,PULL是将远程数据同步到本地,而PUSH是将本地数据同步到远程。对应到同步算法,主要区别在于数据分块和差异编码位置不同。PULL和PUSH同步模式步骤分别如下所述。
PULL同步模式流程:
1、本地对文件A进行数据切分,生成数据块描述文件chunk;
2、上传chunk文件至远程服务器;
3、远程服务器对文件B进行差异编码,生成差异编码文件delta;
4、下载delta文件至本地;
5、本地同步文件A至文件B,相当于下载文件B到本地文件A。

PUSH同步模式流程:
1、远程服务器对文件B进行数据切分,生成数据块描述文件chunk;
2、下载chunk文件至本地;
3、本地对文件A进行差异编码,生成差异编码文件delta;
4、上传delta文件至远程服务器;
5、远程同步文件B到A,相当于上传文件A到远程文件B。


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 网络数据在网卡缓冲区,怎么就是收不到了呀,网络线路是好的
  • 如何将网络数据转存到数据库中
  • 网络数据采集分析工具 TCPDUMP
  • 请问网络连接断开,如何让数据在联网后连续发送?
  • 控制在网络上传输TCP数据包的大小的问题
  • 在网络数据传输中,为了降低数据传输量,用哪种算法最好,有哪位大虾帮忙吗?最好有JAVA源代码
  • *************Linux下如何截取网络数据包??******************* iis7站长之家
  • 易得网络数据采集系统
  • 面向网络的数据库 Neo4j
  • 网络数据包发生器 Hyenae
  • 网络数据包捕获函数库 jNetPcap
  • 数据中心网络框架 Fastpass
  • 网络URL数据库 ARADO
  • 网络掉数据包的问题
  • 网络数据大小端问题
  • *************Linux下如何截取网络数据包??*******************
  • 怎么检查网络过来的数据?
  • 如何实现对网络协议栈(TCP/IP)各层数据的提取?!
  • linux使用tcpdump命令监视指定网络数据包的方法
  • linux转发数据,局域网A(eth1)的数据是如何发送到另一个网卡eth0所在的网络上的,只需要设置FORWARD的ACCEPT吗?
  • Docker、Kubernetes、Neutron中的网络简介
  • 怎么用dos命令配置登陆网络,随便什么网络,举例就行~
  • 基于python实现的网络爬虫功能:自动抓取网页介绍
  • 系统网络问题之网络配置
  • 分布式CAP理论介绍:一致性(Consistency),可用性(Availability),容忍网络分区(Partition tolerance)
  • 网络爬虫/网络蜘蛛 larbin
  • 应对 Docker 网络功能难题的挑战与思考
  • 如何将运行dos的机子联入网络,或在dos下使用网络硬盘
  • Android及andriod无线网络Wifi开发的几点注意事项
  • linux不用命令方式读文件获取网络流量,如何使用C函数调用获取网络流量信息?
  • centos6网络配置及网卡设置相关命令及配置文件


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3