一种数据同步方法及其差分编码和解码方法

文档序号:7623462阅读:265来源:国知局
专利名称:一种数据同步方法及其差分编码和解码方法
技术领域
本发明涉及电子数据处理技术,特别是涉及一种数据同步方法及其差分编码和解码方法。
背景技术
随着信息技术的发展,各种电子数据处理系统以及网络的应用日益广泛。在很多互联网增值业务中,为加强用户之间的沟通和增强用户的体验,很多业务和应用服务器都需要感知用户的状态信息。在一些其他的领域,如电子商务搜索等领域,也需要感知用户的在线状态并提供搜索过滤功能等。
为提高对用户状态信息处理的效率,需要将用户的状态数据从状态数据中心(也可称之为数据同步中心)同步到要接受用户状态数据的各业务服务器(也可称之为同步端)中。
因此,有必要设计和实现某种数据同步方案以高效地同步这些频繁更新的状态数据到各业务服务器,而不增加业务服务器的负荷。
现有技术中,存在一些数据同步的方法。目前,比较通用、高效的数据同步方案一般基于同步中心和同步端间数据块的校验算法,如较为流行的远程数据同步工具Rsync等,属于增量同步方式。
基于校验算法的数据同步方法的工作原理为同步中心针对要同步数据目录中的每个文件,对文件中每个固定大小的数据块(Chunk)生成校验码Checksum,该校验码是能唯一标识文件中某个数据块的数据;然后发送到同步端;同步端收到该信息后,首先也对相应文件的数据块生成校验码Checksum’,将生成的检验码Checksum’与同步中心发送过来的校验码Checksum进行校对;若校验码一致则该数据块中的数据一致,则通知同步中心不需进行数据同步;若两端校验码不一致,则同步端发送同步请求到同步中心,同步中心将数据发送到同步端。如此逐一数据块进行校验码的校对,以及同步;直到整个文件处理完毕。
请参阅图1,是一种现有技术的数据同步方法进行数据同步的流程图。
同步中心对文件的数据块Chunk1(0,1000)生成校验码Checksum1;向同步端发送信息Check_update(filename,Chunk1,Checksum1,…);同步端接受该信息后,对文件的数据块Chunk1(0,1000)采用相同的算法生成校验码Checksum1’;随后比较Checksum1和Checksum1’;由于二者一致,因此向同步中心发送不需同步的通知,携带参数(proto_version,chunkid,oper_type,…),其中proto_version为协议版本,chunkid为数据块标识,oper_type为操作类型(同步或不需同步)。
随后,同步中心对文件的数据块Chunk2(1000,2000)生成校验码Checksum2;向同步端发送信息Check_update(filename,Chunk2,Checksum2,…);同步端接受该信息后,对文件的数据块Chunk2(1000,2000)生成校验码Checksum2’;随后比较Checksum2和Checksum2’;由于二者不一致,因此向同步中心发送同步请求,携带参数(proto_version,chunkid,oper_type,…);同步中心向同步端发送数据同步消息(filename,chunk2,data);同步端接收数据并更新相应的chunk2;然后向同步中心发送同步成功消息。
对于Rsync来说,校验码的生成采用的是md4,在开始时对文件各数据块生成好一系列的checksum列表,然后逐个校对。
但是,该现有技术存在缺陷首先,数据同步中心与同步端都需对文件中每个数据分块进行校验运算和协商同步,协商的次数取决于文件数据分块的大小,若数据分块较小,则需协商的次数较多,协商导致的耗时开销较大;其次,在同步两端校验码不一致的情况下,即使数据块中仅有1个bit的数据发生改变,同步中心也要将整个数据块或者将整个数据块压缩后发送给同步端,数据压缩编码率较低。
由前述可知,若数据分块太小,则会导致同步两端校验运算和协商时延增大;若数据分块太大,则会导致数据压缩编码率降低,故难以找到一个最佳的数据分块值,使其适合所有的应用场景。
现有技术中,另外一种在数据同步领域中使用较多的是全同步方式,同步中心和同步端协商好后,建立数据传输通道,并将要同步的整个数据文件传输到同步端,即使该数据文件仅有少数几个bit发生改变。
该全同步方式的机制相对比较简单,协商只需一次,没有同步过程中多次协商和校验运算的时间开销,但是由于总是要同步整个数据文件,故数据压缩编码率很低,从而增加服务器的网络I/O和带宽消耗。

发明内容
本发明解决的技术问题在于提供一种数据同步方法及其差分编码和解码方法,其协商和校验运算的时间开销小,且可以具有较高的压缩编码率。
为此,本发明解决技术问题的技术方案是提供一种数据同步方法,用于数据同步中心和同步端之间的数据同步;所述方法包括步骤11)数据同步中心和同步端协商启动差分编码同步;数据同步中心对数据文件较上次同步以来的差异特性进行编码;12)数据同步中心将编码后的编码字符串和新生成的最近同步流水号发送到同步端;13)同步端接收到数据同步中心发送的同步信息后,对前述编码字符串进行解码,并根据解码结果设置上次同步得到的数据文件;14)当完成数据同步后,同步端保存前述最近同步流水号。
优选地,在所述步骤11)的协商是同步中心和同步端进行最近同步流水号校对协商;如果最近同步流水号一致,则启动差分编码同步;如果不一致,则采用全同步方式进行数据同步。
优选地,所述步骤11)由同步中心定期发起,且同步频率可配置。
优选地,所述步骤11)还包括对该编码进行压缩;所述步骤13)还包括对该编码字符串进行解压缩。
优选地,所述步骤11)的编码包括
51)对当前数据文件和上次同步后的数据文件进行多字节读入并进行异或运算;52)若异或结果为零,则统计数据块的偏移值;53)若异或结果不等于零,则算出当前数据块的位置值及差异值;54)将当前数据块的位置及差异值组成元素对;对其进行压缩后增加到编码串中。
优选地,所述步骤51)读入的字节的数目可配置;所述步骤53)的位置值为当前数据块位置与上次出现差异特性的数据块位置的差;所述步骤54)采用的压缩算法为Vint压缩算法、zip压缩算法、或离散二进制串的前缀压缩算法。
优选地,所述步骤13)的解码包括获得当前数据块的位置值及差异值;所述步骤13)的设置包括根据编码串中的位置值获得对应的数据文件的数据块;将差异值和前述数据块进行异或运算,得到更新后的数据块;将更新后的数据块写入数据文件中,得到同步后的数据文件。
另外,本发明还提供一种差分编码方法,所述方法包括步骤81)对当前数据文件和与其对应的数据文件进行多字节读入并进行异或运算;82)若异或结果为零,则统计数据块的偏移值;83)若异或结果不等于零,则算出当前数据块的位置值及差异值;84)将当前数据块的位置及差异值组成元素对;对其进行压缩后增加到编码串中。
优选地,所述步骤81)读入的字节的数目可配置;所述步骤83)的位置值为当前数据块位置与上次出现差异特性的数据块位置的差;所述步骤84)采用的压缩算法为Vint压缩算法、zip压缩算法、或离散二进制串的前缀压缩算法。
此外,本发明再提供一种应用于数据同步的差分解码方法,所述方法包括步骤
101)对接收到的编码字符串进行解码,获得当前数据块的位置值及差异值;102)根据编码串中的位置值获得对应的数据文件的数据块;103)将差异值和前述数据块进行异或运算,得到更新后的数据块;104)将更新后的数据块写入数据文件中,得到同步后的数据文件。
相对于现有技术,本发明的有益效果是首先,由于本发明中数据同步中心和同步端经协商启动数据同步过程后,在同步过程中不需要再进行协商,因此可以减少协商的时间开销,且同步端无需进行校验运算,可以提高工作效率;其次,由于采用差分编码方式,对数据文件较上次同步以来的差异特性进行编码,数据编码率较高,从而可以减少网络I/O和带宽使用的开销。
在本发明的优选方案中,数据同步中心和同步端仅需对最近同步流水号协商一次,其协商的时间开销小。
此外,在采用差分编码的基础上,应用压缩算法来实现压缩,数据压缩编码率较高,从而进一步减少网络I/O和带宽使用的开销。


图1是一种现有技术的数据同步方法进行数据同步的流程图;图2是本发明的数据同步方法的流程图;图3是本发明的数据同步方法的实施例中进行差分编码的示意图;图4是本发明的数据同步方法的实施例中进行差分解码的示意图;图5是本发明的数据同步方法中的差分编码器的工作流程图;图6是本发明的数据同步方法中的差分解码器的工作流程图。
具体实施例方式
请参阅图2,是本发明的数据同步方法的流程图。
步骤S211,同步中心和同步端进行最近同步流水号校对协商。如果最近同步流水号一致,则进入步骤S221;如果不一致,则进入步骤S231,采用全同步方式进行数据同步。
在本发明中,所述最近同步流水号校对协商的过程可以由同步中心定期发起,且同步频率可以进行配置。
同步中心针对特定的文件向同步端发送消息<file,last_sync_seq>,其中,last_sync_seq为文件file对应的最近同步流水号;同步端提取本地保存的该文件(上次同步得到数据)的最近同步流水号(上次同步的流水号),进行校对;若不一致,则表示同步端没有获取得到同步中心最近同步的数据,同步端向同步中心发送以全同步方式进行数据同步的请求<file,full_sync_type>;当同步中心收到该请求后,将要同步的数据文件通过建立的数据通道发送到同步端,格式为<file,last_sync_seq,full_sync_type,code_string>。
步骤S221,若最近同步流水号一致,则同步端和数据同步中心之间启动压缩差分编码同步。
步骤S222,数据同步中心对数据文件和数据文件较上次同步以来的差异特性进行压缩编码。
步骤S223,数据同步中心将压缩编码后的编码字符串和新生成的最近同步流水号发送到同步端。
步骤S224,同步端收到数据同步中心发送的同步信息后,对编码字符串进行解码,并设置上次同步得到的数据文件。
步骤S225,当完成数据同步后,保存最近同步流水号。
为了便于对本发明做进一步的了解,下面结合实施例对本发明进行详细描述。
首先,数据同步中心和同步端进行最近流水号校对协商。如果最近同步流水号不一致,则采用全同步方式进行数据同步。如果一致,则由同步端通知数据同步中心进行压缩差分编码同步,所述通知的格式可以是<file,last_sync_seq,sync_type>。
其次,数据同步中心在接收到该通知后,启动差分压缩编码器,对数据文件和数据文件较上次同步以来的差异特性进行压缩编码,并将压缩编码后的编码字符串和新生成的最近同步流水号<last_sync_seq,code_string>发送到同步端。其中,对差异特性进行压缩编码的目的是减少要传输的字节数,从而减少网络带宽的开销。
请参阅图3,是本发明的数据同步方法的实施例中进行差分编码的示意图。
假设数据文件D的t时刻为D1,当前时刻为D2,经过差分编码器(DiffEncoder)300后将得到数据文件D1和D2差异特性表示的编码串code string。
本实施例中,数据同步中心和同步端进行同步时,压缩编码串(Code String)格式定义为Vint{(offset,diff_value)<diff_count>}。
其中,数据文件D1和D2的差异特性通过元素对(offset,diff_value)进行表示,diff_count为差异元素对个数,offset为相对上次元素对表示差异特性的数据块偏移,diff_value为差异值。
差异值为数据文件与上次同步数据文件的相应数据块进行异或运算得到。
当然,本领域的技术人员数据块的位置也可以直接用该字节的位置(即相对于文件头的偏移)表示。
优选采用相对偏移,如此有利于压缩,使用本实施例提到的压缩算法,一般只使用一个字节则能进行表示。而若直接用该字节的位置表示,将需要多个字节表示。
本实施例采用的Vint压缩算法是一种简单且效率很高的整形压缩算法,其主要思想为每7bits使用一个字节进行表示。当然,本领域的技术人可以理解,还可以采用其他的压缩算法来进行压缩。例如zip压缩算法、或离散二进制串的前缀压缩算法等等。
请参阅表1,是压缩的示例。
表1


该表格1列举了一些数值在压缩前后的对应,并清楚地表示出其压缩特性。其中,Value为需要压缩的值,first byte、second byte、third byte则分别表示压缩后各字节的值。
再次,同步端收到数据同步中心发送的同步信息<last_sync_seq,code_string>后,启动差分压缩解码器对code_string进行解码,得到多个二元组(offset,diff_value),并设置上次同步得到的数据文件。当完成数据同步后,设置最近同步流水号到数据同步登记表中。
请参阅图4,本发明的数据同步方法的实施例中进行差分解码的示意图。
启动差分压缩解码器(Diff_Decoder)400对code_string进行解码,得到多个二元组(offset,diff_value);对每个(offset,diff_value),从上次同步得到的数据文件D1中获取相对offset的数据块,并与diff_value进行异或运算,完成后再写回到D1数据文件,得到要同步的数据文件D2。
请参阅图5,是本发明的数据同步方法中的差分编码器的工作流程图。
步骤S510,差分编码器进行编码时,对数据文件D1和D2进行多字节读入并进行异或运算(读入的字节个数为差分编码器的可调参数,缺省为32bits)。
步骤S520,若异或结果为0,则统计offset值。
步骤S530,若异或结果不等于0,则算出其offset及diff_value值。将offset和diff_value组成元素对(offset,diff_value)。
其中,offset及diff_value值可以采用这样的方式来计算offset=当前数据块位置-上次出现差异特性的数据块位置;若data_d1 data_d2分别表示数据文件D1和D2相应数据块(chunk)的数据,则diff_value=data_d1^data_d1。
步骤S540,使用压缩算法对offset及diff_value值进行压缩,增加到编码队列中。
请参阅图6,是本发明的数据同步方法中的差分解码器的工作流程图。
步骤S610,差分解码器进行解码时,获取差分编码器生成的编码串。
步骤S620,根据编码串中的offset获得对应的数据文件D1的数据块。
步骤S630,将diff_value值和前述数据块进行异或运算,得到更新后的数据块。
步骤S640,将其写入数据文件D1中,得到要同步的数据文件D2。
本领域的技术人员理解,本发明中,差分编/解码器采用的是边读入边进行编码压缩或边读入边进行解码的方式,效率比较高。
应用实例应用本发明的技术方案在用户状态数据中心和各应用服务器(同步端)间进行数据同步,效果比较好。
140M的用户状态数据在状态同步中心与同步端间,每5s需进行一次同步,同步更新较为频繁,5s内总共大概有25000个用户的状态发生变化(上线,下线或隐身,每状态使用2bit进行表示)。
应用本发明的技术方案所描述的具压缩特性的差分编码器处理后的编码数据仅为65K,而编码的效率为ms级,同步端进行解码同步的速度更为微秒级。整个同步过程从数据同步中心发起同步请求,到同步端收到应答后完成数据同步,耗时为ms级,效率极高。并且由于大大压缩了要同步的数据量,节省了两端CPU和内网带宽的开销。
综上所述,本发明提供一种使数据同步中心和同步端高效进行数据同步的方法,该技术方案对于数据文件同步前后的差异具有稀疏特性,且同步中心需与同步端进行频繁准实时同步的应用场景效果很好。
本发明的方法对同步中心和同步端的同步机制进行了改进。
同时,具有压缩特性的差分编/解码方法的实现能对数据文件较上次同步以来的差异特性进行编码压缩表示,另一侧获得这个编码串并进行解码后能得到要同步的数据。
以上所述仅仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种数据同步方法,用于数据同步中心和同步端之间的数据同步;其特征在于,包括步骤11)数据同步中心和同步端协商启动差分编码同步;数据同步中心对数据文件较上次同步以来的差异特性进行编码;12)数据同步中心将编码后的编码字符串和新生成的最近同步流水号发送到同步端;13)同步端接收到数据同步中心发送的同步信息后,对前述编码字符串进行解码,并根据解码结果设置上次同步得到的数据文件;14)当完成数据同步后,同步端保存前述最近同步流水号。
2.根据权利要求1所述的数据同步方法,其特征在于,所述步骤11)中的协商是同步中心和同步端进行最近同步流水号校对协商,如果最近同步流水号一致,则启动差分编码同步;如果不一致,则采用全同步方式进行数据同步。
3.根据权利要求2所述的数据同步方法,其特征在于,所述步骤11)由同步中心定期发起,且同步频率可配置。
4.根据权利要求1至3任一项所述的数据同步方法,其特征在于,所述步骤11)还包括对该编码进行压缩;所述步骤13)还包括对该编码字符串进行解压缩。
5.根据权利要求4所述的数据同步方法,其特征在于,所述步骤11)的编码包括51)对当前数据文件和上次同步后的数据文件进行多字节读入并进行异或运算;52)若异或结果为零,则统计数据块的偏移值;53)若异或结果不等于零,则算出当前数据块的位置值及差异值;54)将当前数据块的位置及差异值组成元素对;对其进行压缩后增加到编码串中。
6.根据权利要求5所述的数据同步方法,其特征在于,所述步骤51)读入的字节的数目可配置;所述步骤53)的位置值为当前数据块位置与上次出现差异特性的数据块位置的差;所述步骤54)采用的压缩算法为Vint压缩算法、zip压缩算法、或离散二进制串的前缀压缩算法。
7.根据权利要求6所述的数据同步方法,其特征在于,所述步骤13)的解码包括获得当前数据块的位置值及差异值;所述步骤13)的设置包括根据编码串中的位置值获得对应的数据文件的数据块;将差异值和前述数据块进行异或运算,得到更新后的数据块;将更新后的数据块写入数据文件中,得到同步后的数据文件。
8.一种差分编码方法,其特征在于,包括步骤81)对当前数据文件和与其对应的数据文件进行多字节读入并进行异或运算;82)若异或结果为零,则统计数据块的偏移值;83)若异或结果不等于零,则算出当前数据块的位置值及差异值;84)将当前数据块的位置及差异值组成元素对;对其进行压缩后增加到编码串中。
9.根据权利要求8所述的差分编码方法,其特征在于,所述步骤81)读入的字节的数目可配置;所述步骤83)的位置值为当前数据块位置与上次出现差异特性的数据块位置的差;所述步骤84)采用的压缩算法为Vint压缩算法、zip压缩算法、或离散二进制串的前缀压缩算法。
10.一种应用于数据同步的差分解码方法,其特征在于,包括步骤101)对接收到的编码字符串进行解码,获得当前数据块的位置值及差异值;102)根据编码串中的位置值获得对应的数据文件的数据块;103)将差异值和前述数据块进行异或运算,得到更新后的数据块;104)将更新后的数据块写入数据文件中,得到同步后的数据文件。
全文摘要
本发明涉及一种数据同步方法,用于数据同步中心和同步端之间的数据同步;包括步骤数据同步中心和同步端协商启动差分编码同步;数据同步中心对数据文件较上次同步以来的差异特性进行编码;数据同步中心将编码后的编码字符串和新生成的最近同步流水号发送到同步端;同步端接收到数据同步中心发送的同步信息后,对前述编码字符串进行解码,并根据解码结果设置上次同步得到的数据文件;当完成数据同步后,同步端保存前述最近同步流水号。由于本发明中数据同步中心和同步端经协商启动数据同步过程后,在同步过程中不需要再进行协商,因此可以减少协商的时间开销,且同步端无需进行校验运算,可以提高工作效率。
文档编号H04L29/06GK1949761SQ200510100339
公开日2007年4月18日 申请日期2005年10月13日 优先权日2005年10月13日
发明者黄斌强 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1