我面临以下挑战:
我在不同的地理位置有一堆数据库,其中网络可能会出现很多故障(我正在使用蜂窝网络)。我需要保持所有数据库同步,但不需要实时。我正在使用 Java,但我可以自由选择任何免费数据库。
关于如何实现这一目标的任何建议。
谢谢。
我面临以下挑战:
我在不同的地理位置有一堆数据库,其中网络可能会出现很多故障(我正在使用蜂窝网络)。我需要保持所有数据库同步,但不需要实时。我正在使用 Java,但我可以自由选择任何免费数据库。
关于如何实现这一目标的任何建议。
谢谢。
这是一个相当成熟的研究语料库(人们显然不知道)的问题。如果不是绝对必要的话,我建议不要重新发明一个糟糕的、有缺陷的轮子(例如,如此不寻常的要求允许一个微不足道的解决方案)。
一些关键词:复制、移动 DBMS、分布式断开连接的 DBMS。
这些研究论文也是相关的(作为该研究领域的一个例子):
... 等等。
我不知道有任何数据库可以开箱即用地为您提供此功能。由于需要最终的一致性和冲突解决,这里有很多复杂性(例如,如果网络分成两半,您将某些内容更新为值 123 而我将另一半更新为 321,会发生什么情况,然后网络重新连接?)
你可能不得不自己动手。
有关如何做到这一点的一些想法,请查看 Yahoo 的 PNUTS 系统的设计:http ://research.yahoo.com/node/2304和 Amazon 的 Dynamo:http ://www.allthingsdistributed.com/2007/10/amazons_dynamo .html
查看SymmetricDS。SymmetricDS 是支持网络的、独立于数据库的数据同步/复制软件。它使用 Web 和数据库技术在关系数据库之间近乎实时地复制表。该软件旨在扩展大量数据库,跨低带宽连接工作,并承受网络中断期间。
我不知道您的要求或您的应用程序,但这不是一个快速回答类型的问题。我很想看看别人怎么说。但是,根据您的要求和情况,我有一个建议可能对您有用,也可能不适用。特别是,如果您的用户即使在网络不可用(离线访问)时也需要使用该应用程序,这也无济于事。
保持一堆小型数据库同步是一项相当复杂的正确任务。是否有可能只拥有一个集中式数据库,或者让客户端应用程序直接连接到它,或者(我的首选解决方案)编写一些 Web 服务来处理访问/更新数据,而不是拥有一堆客户端数据库?
我意识到这会限制离线访问,但您可以使用多种缓存策略。(当然,这会让你回到原来的问题。)