我有一个与数据同步相关的问题:
我有一个源会顺序地将数据发送到我的计算机。假设我们将每个数据命名为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。
有没有基于定时的同步算法来解决这个问题?
非常感谢!
发布于 2017-04-01 15:49:22
好的,只要我们知道每个V都有一个ID,那么构建一个数据持久化级别来处理数据同步就很简单了。
我会使用缓存数据库(例如redis)来存储每个V emmited。在每个套接字侦听新值A或B时,检查DB中是否存在相应的V,如果不存在,则使用V ID创建一个新的键,否则,将新接收的值添加到相关的V中。
使用不同的层进行数据同步将为您提供无需担心每个V之间的间隔延迟的优势。
更新
因为除了时间之外,我们没有任何信息源来链接发出的数据,即A和B,所以每当A被发送时,我仍然会使用Redis为每个V创建一个新的条目,然后在侦听B数据的套接字上,如果新的A已经注册,我将有一个通知函数,如果该函数被触发,我将获取新的条目并放置一个计时器,如果接收到新的B数据,我将把它与该条目放在一起。notify函数也会设置一个计时器,所以如果它超过了15分钟的最大时间。它将不使用该条目,或者如果已经注册了新的A,它将使用新的条目而不是之前获取的条目。
https://stackoverflow.com/questions/43153306
复制相似问题