发明内容
本发明要解决的技术问题是提供一种分布式系统数据同步的方法及装置,以避免在通讯能力不足时内存耗尽的问题。
为了解决上述技术问题,本发明提供了一种分布式系统数据同步的方法,包括:
发送端创建数据条目时,按序为所创建的数据条目分配序列号;
对发生变化的数据条目对应的序列号进行处理;
将包括处理后的序列号信息的同步消息发送给接收端。
进一步地,上述方法还具有下面特点:所述对发生变化的数据条目对应的序列号进行处理包括:
将新创建的数据条目和内容发生变化的数据条目对应的序列号放入更新处理链表;
所述将包括处理后的序列号信息的同步消息发送给接收端,包括:
将所述更新处理链表中的序列号和对应数据条目的内容放入更新同步消息中,将所述更新同步消息发送给接收端。
进一步地,上述方法还具有下面特点:
所述对发生变化的数据条目对应的序列号进行处理包括:将与删除的数据条目的序列号最近的序列号放入删除处理链表;
所述将包括处理后的序列号信息的同步消息发送给接收端,包括:
根据所述删除处理表中的每一序列号与本地现存的序列号,分别生成一开区间数据;
将所述开区间数据放入删除同步消息后发送给接收端。
为了解决上述问题,本发明还提供了一种分布式系统数据同步的发送装置,包括:
创建模块,用于创建数据条目时,按序为所创建的数据条目分配序列号;
处理模块,用于对发生变化的数据条目对应的序列号进行处理;
发送模块,用于将包括处理后的序列号信息的同步消息发送给接收端。
进一步地,上述装置还具有下面特点:
所述处理模块,具体用于将新创建的数据条目和内容发生变化的数据条目对应的序列号放入更新处理链表;
所述发送模块,具体用于将所述更新处理链表中的序列号和对应数据条目的内容放入更新同步消息中,将所述更新同步消息发送给接收端。
进一步地,上述装置还具有下面特点:
所述处理模块,具体用于将与删除的数据条目的序列号最近的序列号放入删除处理链表;
所述发送模块,具体用于根据所述删除处理表中的每一序列号与本地现存的序列号,分别生成一开区间数据;将所述开区间数据放入删除同步消息后发送给接收端。
为了解决上述问题,本发明还提供了一种分布式系统数据同步的方法,包括:
接收同步消息,所述同步消息至少携带数据条目的序列号信息;
根据所述序列号信息对本地的数据进行同步操作。
进一步地,上述方法还具有下面特点:
所述同步消息为更新同步消息,所述更新同步消息携带数据条目的序列号和内容;
所述根据所述序列号信息对本地的数据进行同步操作包括:
根据所述序列号查找本地是否存在对应的数据条目,若存在,则根据所述更新同步消息携带的数据条目的内容修改本地存储的对应的数据条目的内容;若不存在,则根据所述更新同步消息携带的数据条目的内容创建一条数据条目,并将所述序列号写入所创建的数据条目。
进一步地,上述方法还具有下面特点:
所述同步消息为删除同步消息,所述删除同步消息携带由序列号构成的开区间数据;
所述根据所述序列号信息对本地的数据进行同步操作包括:
在本地查找在所述开区间数据范围内的数据条目的序列号;
将查找到的序列号对应的数据条目删除。
为了解决上述问题,本发明还提供了一种分布式系统数据同步的接收装置,包括:
接收模块,用于接收同步消息,所述同步消息至少携带数据条目的序列号信息;
同步模块,用于根据所述序列号信息对本地的数据进行同步操作。
进一步地,上述装置还具有下面特点:
所述同步消息为更新同步消息,所述更新同步消息携带数据条目的序列号和内容;
所述同步模块包括:
查找单元,用于根据所述序列号查找本地是否存在对应的数据条目;
修改单元,用于在所述查找单元查找到存在对应的数据条目,则根据所述更新同步消息携带的数据条目的内容修改本地存储的对应的数据条目的内容;
创建单元,用于在所述查找单元查找到不存在对应的数据条目,则根据所述更新同步消息携带的数据条目的内容创建一条数据条目,并将所述序列号写入所创建的数据条目。
进一步地,上述装置还具有下面特点:
所述同步消息为删除同步消息,所述删除同步消息携带由序列号构成的开区间数据;
所述同步模块包括:
查找单元,用于在本地查找在所述开区间数据范围内的数据条目的序列号;
删除单元,用于将查找到的序列号对应的数据条目删除。
综上,本发明提供一种分布式系统数据同步的方法及装置,可以使内存的消耗只与当前的数据信息有关,而与外部环境震荡与否、本设备处理能力等无关。本发明通过用未删除的信息条目来表述已删除的信息条目,避免了在通讯能力不足时内存耗尽的可能;并且不限制通讯方式,通用性高;可以提供灵活的策略,以满足同步快交互慢的需求,或者反过来满足交互快同步慢的需求。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图1为本发明实施例的分布式系统数据同步的发送装置的示意图,本实施例的装置是针对数据同步的发送端而言的,如图1所示,本实施例的装置包括:
创建模块,用于创建数据条目时,按序为所创建的数据条目分配序列号;
处理模块,用于对发生变化的数据条目对应的序列号进行处理;
发送模块,用于将包括处理后的序列号信息的同步消息发送给接收端。
其中,所述处理模块,具体用于将新创建的数据条目和内容发生变化的数据条目对应的序列号放入更新处理链表;
所述发送模块,具体用于将所述更新处理链表中的序列号和对应数据条目的内容放入更新同步消息中,将所述更新同步消息发送给接收端。
其中,所述处理模块,具体用于将与删除的数据条目的序列号最近的序列号放入删除处理链表;
所述发送模块,具体用于根据所述删除处理表中的每一序列号与本地现存的序列号,分别生成一开区间数据;将所述开区间数据放入删除同步消息后发送给接收端。
其中,所述创建模块,按序为所创建的数据条目分配序列号包括:按序为所创建的每一类数据条目分别独立地分配序列号。
图2为本发明实施例的分布式系统数据同步的接收装置的示意图,本实施例的装置是针对数据同步的接收端而言的,如图2所示,本实施例的装置包括:
接收模块,用于接收同步消息,所述同步消息至少携带数据条目的序列号信息;
同步模块,用于根据所述序列号信息对本地的数据进行同步操作。
所述同步消息可以为更新同步消息,所述更新同步消息可携带数据条目的序列号和内容;
所述同步模块包括:
查找单元,用于根据所述序列号查找本地是否存在对应的数据条目;
修改单元,用于在所述查找单元查找到存在对应的数据条目,则根据所述更新同步消息携带的数据条目的内容修改本地存储的对应的数据条目的内容;
创建单元,用于在所述查找单元查找到不存在对应的数据条目,则根据所述更新同步消息携带的数据条目的内容创建一条数据条目,并将所述序列号写入所创建的数据条目。
所述同步消息可以为删除同步消息,所述删除同步消息可携带由序列号构成的开区间数据;
所述同步模块包括:
查找单元,用于在本地查找在所述开区间数据范围内的数据条目的序列号;
删除单元,用于将查找到的序列号对应的数据条目删除。
图3为本发明实施例的分布式系统数据同步的方法的流程图,本实施例的方法是针对数据同步的发送端而言的,如图3所示,本实施例的方法包括下面步骤:
S11、发送端创建数据条目时,按序为所创建的数据条目分配序列号;
S12、对发生变化的数据条目对应的序列号进行处理;
S13、将包括处理后的序列号信息的同步消息发送给接收端。
其中,步骤S11中,按序为所创建的数据条目分配序列号可以包括:
按序为所创建的每一类的数据条目分别独立地分配序列号。
其中,步骤S12可以包括:将新创建的数据条目和内容发生变化的数据条目对应的序列号放入更新处理链表;则步骤S13可以包括:将所述更新处理链表中的序列号和对应数据条目的内容放入更新同步消息中,将所述更新同步消息发送给接收端。
其中,步骤S12可以包括:将与删除的数据条目的序列号最近的序列号放入删除处理链表;则步骤S13可以包括:根据所述删除处理表中的每一序列号与本地现存的序列号,分别生成一开区间数据;将所述开区间数据放入删除同步消息后发送给接收端。
例如,本实施例的发送端可以实施为:
a、定义一个单调递增/递减序列号发生器;
b、新建一需要同步的路由信息条目时,将序列号发生器的值赋给该条目,序列号发生器自身值加一或减一,将该条目加入一个待添加/更新处理链表尾部;
c、若一条目内容发生改变,则将该条目从链表中挪出,并再次放入待添加/更新处理链表尾部;
d、一条目删除时,直接释放内存,并且将值最近的序列号,小于或大于该释放条目的某个条目放入待删除处理链表尾部;
e、在通讯可用时,先扫描待删除处理链表,对每个条目生成一个序列号开区间,将该开区间放入删除消息中发给各个线卡;待删除处理链表处理完后再处理待添加/更新处理链表,将每个条目的序列号和内容一起放入添加/更新消息中发给各个线卡。
在所述步骤e中,如果通讯采用单播方式,则针对每个接收端的扫描可以各自独立进行,互不相干。
所述步骤b、c、d、e间没有顺序要求,可以根据实际应用场景定义b、c、d的处理优先级高于e也可以反过来定义。
图4为本发明另一实施例的分布式系统数据同步的方法的流程图,本实施例的方法是针对数据同步的接收端而言的,如图4所示,本实施例的方法包括下面步骤:
S21、接收同步消息,所述同步消息至少携带数据条目的序列号信息;
S22、根据所述序列号信息对本地的数据进行同步操作。
其中,所述同步消息可以为更新同步消息,所述更新同步消息携带数据条目的序列号和内容;
步骤S22可以包括:
根据所述序列号查找本地是否存在对应的数据条目,若存在,则根据所述更新同步消息携带的数据条目的内容修改本地存储的对应的数据条目的内容;若不存在,则根据所述更新同步消息携带的数据条目的内容创建一条数据条目,并将所述序列号写入所创建的数据条目。
其中,所述同步消息可以为删除同步消息,所述删除同步消息携带由序列号构成的开区间数据;
步骤S22可以包括:
在本地查找在所述开区间数据范围内的数据条目的序列号;
将查找到的序列号对应的数据条目删除。
本发明实施例提供的分布式系统数据同步的方法,可以使内存的消耗只与当前的数据信息有关,而与外部环境震荡与否、本设备处理能力等无关。本发明实施例通过用未删除的信息条目来表述已删除的信息条目,避免了在通讯能力不足时内存耗尽的可能。并且不限制通讯方式,通用性高。可以提供灵活的策略,以满足同步快交互慢的需求,或者反过来满足交互快同步慢的需求。
如果通讯采用单播方式时,可以在发送端定制发送策略,应用灵活,而且不会因为某个接收端处理过慢而拖累其他接收端的同步处理。
下面结合附图和具体实施例对本发明作进一步的介绍,但不作为对本发明的限定。
在本实施例中,在发送端使用了3个链表来维护待同步的信息条目,分别是按照创建顺序排序的创建链表,按照变化顺序排序的变化链表,按照删除顺序排序的删除链表。应注意的是也可以使用其它数据结构来维护待同步的信息条目。在接收端使用二叉树来维护接收到的信息条目,应注意的是也可以使用其它数据结构来维护待同步的信息条目。
发送端开始时创建了7个信息条目,按照序列号单调递增原则给这7个条目分别分配了序列号1、2、3、4、5、6、7。此时创建链表链接方式为1->2->3->4->5->6->7;删除链表为空;变化链表为1->2->3->4->5->6->7。
之后发送端条目3、7、1发生了改变导致变化链表变为2->4->5->6->3->7->1。
假定在某个时刻下,数据发送端在之前已经将变化链表中的2->4->5->6->3扫描并同步给数据接收端,接收端生成了对应的5个条目的二叉树结构,如图5中的接收端数据结构所示。
之后发送端删除了条目6、5、2,删除条目6时需要将其从创建链和变化链中摘除,并将序列号小于它的最近的条目5挂接到删除链上;删除条目5时需要将其从创建链、变化链和删除链中摘除,并将序列号小于它的最近的条目4挂接到删除链上;删除条目2时需要将其从创建链和变化链中摘除,并将序列号小于它的最近的条目1挂接到删除链上;最后创建链为1->3->4->7,删除链为4->1,变化链为4->3->7->1,如图5中的发送端数据结构所示。
以图5作为开始同步的某个初始态,图6表示进行删除同步的流程,如图所示,该方法包括以下步骤:
步骤201:发送端和接收端通讯可用时,发送端按顺序扫描删除链表上的节点;首先处理节点4,将节点4自身的序列号4作为删除区间的左值,在创建链表中查找到本节点的下一节点7,将节点7的序列号7作为删除区间的右值,最后形成了删除区间(4,7),将删除区间(4,7)填入删除消息。
步骤202:继续扫描删除链表下一个节点,处理节点1,形成删除区间(1,3)填入到删除消息,将消息发送到接收端。
步骤203:接收端收到删除消息,处理第一个删除区间(4,7),在本地二叉树的数据结构中查找序列号大于4且小于7的节点,找到的节点为5,6两个节点,删除5,6节点,数据结构从2,3,4,5,6的二叉树变为2,3,4的二叉树。
步骤204:接收端处理下一个删除区间(1,3),在本地二叉树的数据结构中查找序列号大于1且小于3的节点,找到的节点为2的节点,删除2节点,数据结构从2,3,4的二叉树变为3,4的二叉树。处理结束。
删除同步完成后,按照图7进行添加/更新的同步流程,如图所示,该方法包括以下步骤:
步骤301:发送端和接收端通讯可用时,发送端按顺序扫描添加/更新链表上的节点;扫描到4,3,7,1节点发生了添加/更新操作。
步骤302:分别处理节点4,3,7,1,将节点的序列号和业务内容一起填入到添加/更新消息中,发送消息到接收端。
步骤303:接收端收到添加/更新消息,处理4,3节点消息内容,先在本地查找是否存在这些节点,发现4,3节点已经存在,仅仅更新4,3节点的业务内容。
步骤304:接收端处理7,1节点消息内容,先在本地查找是否存在这些节点,发现7,1节点不存在,创建生成7,1节点,二叉树数据结构从3,4变为1,3,4,7的二叉树,处理结束。
在上述实施例的基础上,本发明还可以有各种变换,这些变换应当属于本发明的保护范围之内。
例如:发送端不使用链表来维护创建链表,而是采用T-Tree、二叉树、红黑树等有序树方式进行维护;接收端也不使用二叉树来维护接收的数据,而是采用T-Tree、二叉树、红黑树等有序树方式进行维护等。
又如:将序列号的单调递增分配方式改为单调递减分配方式,将删除链表的挂接方式改为取序列号大于删除节点方式挂接等。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
以上仅为本发明的优选实施例,当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。