在不稳定的网络环境中保持分布式数据库同步

21

我面临如下挑战:

我有很多位于不同地理位置的数据库,网络连接可能会经常失败(我使用蜂窝网络)。我需要让所有数据库保持同步,但没有必要实时同步。我正在使用 Java 编程语言,但我可以自由选择任何一个免费的数据库。

我该如何实现这一目标?


1
你正在寻找一个工具吗?还是要开发一种定制解决方案? - Pascal Thivent
4个回答


10

我不知道是否有任何数据库可以为您提供这个功能;由于需要最终一致性和冲突解决(例如,如果网络分成两半并且您将某些内容更新为值123,而我在另一半上将其更新为值321,然后网络重新连接会发生什么?),这里存在很多复杂性。

您可能需要自己开发。

关于如何实现此功能的一些想法,请参考Yahoo的PNUTS系统的设计:http://research.yahoo.com/node/2304 和Amazon的Dynamo:http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html


雅虎的论文非常有趣。 开发自己的解决方案的想法已经在我脑海中了。我希望能拥有类似于GIT的数据库。 - jassuncao
2
关于Git的问题在于,当存在冲突更新时,它会让你执行手动合并。对于数据库来说,这通常不是可行的选择。因此,您需要一个一致性模型,以尽可能少地产生意外。 - SquareCog

4

请查看SymmetricDS。 SymmetricDS是基于web、独立于数据库的数据同步/复制软件。它使用web和数据库技术在接近实时的条件下,将表格在关系数据库之间复制。该软件旨在针对大量数据库进行扩展,在低带宽连接下工作,并经受网络中断期间的考验。


是的。我已经看过它并试用了一下。看起来相当不错。 很可能这就是要使用的。 - jassuncao

0

我不知道你的需求或应用程序,但这不是一个快速回答的问题。我非常想知道别人有什么说法。然而,我有一个建议,可能适合你,也可能不适合,这取决于你的要求和情况。特别是,如果你的用户需要在网络不可用时(离线访问),这将无济于事。

保持一堆小型数据库同步是一个相当复杂的任务,需要正确地完成。是否有可能只有一个集中式数据库,并让客户端应用程序直接连接到它,或者(我更喜欢的解决方案)编写一些Web服务来处理访问/更新数据,而不是拥有一堆客户端数据库?

我意识到这限制了离线访问,但是有各种缓存策略可以使用。(当然,这会让你回到最初的问题。)


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