数据库同步算法建议

16

我正在开发一个应用程序,需要实现数据同步算法。

我们有一个主服务器和多个从属设备,它们需要进行同步。

现在,我有三种算法,我想听听你们中的任何人对哪一种算法最好的建议。我真的非常感谢你们的意见。

1. 可以在此处找到该算法的描述。这是一篇由韩国汉阳大学信息与通信分部的Sang-Wook Kim撰写的科学研究论文。

http://goo.gl/yFCHG

2. 这个算法涉及维护数据库时间戳和版本号的记录

例如,如果一个移动设备的版本为v10,服务器的版本为v12,则假定移动设备上的当前时间戳比服务器上的时间戳要早,

如果我们用-表示删除,+表示插入,~表示更改

并且以下更改日志与几个版本相关:

v11:+r(44),~r(45),-r(46) v12:-r(44),〜r(45),+r(47)

那么数据库的整体变化就是,从v12开始的~r(45),+r(47),-r(46)

因此可以看到,记录r(44)不需要,即使它被添加了,然后被删除了。因此不需要传输冗余数据。

整个算法可以在此处找到(我把它放在了pdf中)http://goo.gl/yPC7A

3. 该算法实际上--保持每条记录的最后更改时间戳的表格。并按时间戳对行进行排序。仅同步已更改的行,我唯一看到的缺点就是根据时间戳每次对表进行排序。

这里有一个链接http://goo.gl/8enHO

非常感谢您的意见!:D


数据同步可能是一个非常困难的问题,我会尽量避免自己解决它。当然,并没有“最佳”方法,一切都取决于您的用例。尝试识别(并最小化)可能存在并发更新的地方,然后寻找最简单的适合解决方案。 - driushkin
我猜你现在已经选择了一个算法。我很好奇是否有一种算法更容易查询当前数据。我需要一种能够使跨数据库连接相同表格变得相对简单的算法。 - Joel
1个回答

2

我自己没有直接参与此事,但我曾在人们处理此类事情时在场。他们的设计不是基于算法分析或追求性能,而是花费了大量时间与最终用户的代表进行讨论,以确定在收到冲突更新请求时该怎么做。您可能需要与用户一起通过一些用例进行工作。甚至可能用户希望针对不同地方的不同数据采用不同类型的冲突解决方案。

所有这里的设计都通过传播更改来节省带宽。如果某些原因导致一侧停止成为另一侧的精确副本,则这种不一致可能会无限期地存在。您可以通过交换校验和(如果您足够担心,则使用SHA-2或SHA-3)来至少检测此类问题。一种想法是向接收系统请求校验和,然后根据该校验和选择一组更新包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接