21

我面临以下挑战:

我在不同的地理位置有一堆数据库,其中网络可能会出现很多故障(我正在使用蜂窝网络)。我需要保持所有数据库同步,但不需要实时。我正在使用 Java,但我可以自由选择任何免费数据库。

关于如何实现这一目标的任何建议。

谢谢。

4

4 回答 4

20

这是一个相当成熟的研究语料库(人们显然不知道)的问题。如果不是绝对必要的话,我建议不要重新发明一个糟糕的、有缺陷的轮子(例如,如此不寻常的要求允许一个微不足道的解决方案)。

一些关键词:复制移动 DBMS分布式断开连接的 DBMS

这些研究论文也是相关的(作为该研究领域的一个例子):

  1. 分布式断开连接的数据库

... 等等。

于 2009-10-20T16:38:07.830 回答
10

我不知道有任何数据库可以开箱即用地为您提供此功能。由于需要最终的一致性和冲突解决,这里有很多复杂性(例如,如果网络分成两半,您将某些内容更新为值 123 而我将另一半更新为 321,会发生什么情况,然后网络重新连接?)

你可能不得不自己动手。

有关如何做到这一点的一些想法,请查看 Yahoo 的 PNUTS 系统的设计:http ://research.yahoo.com/node/2304和 Amazon 的 Dynamo:http ://www.allthingsdistributed.com/2007/10/amazons_dynamo .html

于 2009-09-24T17:45:15.377 回答
4

查看SymmetricDS。SymmetricDS 是支持网络的、独立于数据库的数据同步/复制软件。它使用 Web 和数据库技术在关系数据库之间近乎实时地复制表。该软件旨在扩展大量数据库,跨低带宽连接工作,并承受网络中断期间。

于 2010-01-29T12:32:41.080 回答
0

我不知道您的要求或您的应用程序,但这不是一个快速回答类型的问题。我很想看看别人怎么说。但是,根据您的要求和情况,我有一个建议可能对您有用,也可能不适用。特别是,如果您的用户即使在网络不可用(离线访问)时也需要使用该应用程序,这也无济于事。

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

我意识到这会限制离线访问,但您可以使用多种缓存策略。(当然,这会让你回到原来的问题。)

于 2009-09-24T17:38:33.300 回答