基于时序的数据同步算法

时间:2017-04-01 05:48:20

标签: multithreading data-synchronization

我遇到与数据同步相关的问题:

我有一个源,可以顺序向我的计算机发送数据。假设我们调用名为V的每个数据.V具有唯一ID并包含2个项目A和B,每个A或B只有一个字符串数据调用ID。 B是可选的,即V只能包含A. V将通过2个tcp套接字或2个消息队列独立地向计算机发出A和B. V的ID未被激活且没有同步感,仅用于稍后的手动检查。 每个V之间的间隔延迟可以从最小500ms到15分钟不等。

例如,源V1(A1,B1),V2(A2),V3(A3,B3) 它们通过2个队列QA(A1,A2,A3)和QB(B1,B3)发射到计算机。

如何在2个队列的消费者处将V的数据A和B同步为源条目序列顺序? 必需:B必须同步到精确V,A可能是错误的V.例如,同步后,V1必须包含B1,V2必须没有B.V3必须包含B3。

是否存在基于解决此问题的时序的同步算法。

非常感谢!

1 个答案:

答案 0 :(得分:0)

好的,只要我们知道每个V都有一个ID,就可以建立一个数据持久性级别来处理数据同步。

我会使用缓存数据库(例如redis)来存储每个V emmited。在每个套接字上侦听新值A或B,检查数据库中是否存在相应的V,如果不存在则使用V ID创建新密钥,否则如果存在则将新接收的值添加到相关的V.

使用不同的层进行数据同步将使您不必担心每个V之间的间隔延迟。

<强>更新

由于我们没有任何信息来源链接发出的数据,即A和B而不是时间,我仍然会使用Redis为每个V创建一个新的条目,每当发送A,然后在套接字上监听B数据如果已经注册了新的A,我将有一个通知功能,如果该功能被触发,我将获取新的条目并放置一个定时器,如果接收到新的B数据,我将把它放在该条目中。通知功能也将放置一个计时器,因此如果超过15分钟的最大时间。它不会使用该条目,或者如果新的A已经注册,它将使用新的A而不是之前提取的。