如何使用离线和在线数据库创建Java桌面应用程序,定期同步?

时间:2012-04-18 12:31:30

标签: java database

我想创建java桌面应用程序,它将数据脱机存储在数据库中(不仅仅是一些配置文件)。当用户离线时,应用程序应该可以正常工作。当用户联机时,脱机数据库应该能够与在线主数据库同步。

有什么想法可以用来实现这个目标吗?

3 个答案:

答案 0 :(得分:2)

这已经在stackoverflow上进行了很多讨论,它通常归结为:不推出自己的解决方案 - 这是一个非常专业的领域 - 查找SymmetricDS。它做你想要的。

我最喜欢的讨论之一是Strategy for Offline/Online data synchronization

答案 1 :(得分:0)

将一个可用的纯java数据库实现用作本地数据库。使用任何其他数据库作为远程数据库。 实现尝试连接到远程数据库的逻辑,并在失败时回退到本地数据库。如果它成功连接到远程数据库,则实现数据同步。

答案 2 :(得分:0)

当本地应用程序运行时,它不仅应该更改数据库,还应记录更改。当连接可用时,将更改发送到服务器。此外,应用程序接收存储在服务器上的记录更改(来自其他应用程序实例)。

主要问题是如何合并不同实例所做的更改。可以有3种变体:

1)每个应用程序实例只能修改整个数据库的私有部分。您很幸运,不需要合并,服务器只能存储日志而不能运行整个数据库。

2)修改总是可以自动合并(例如,应用程序可以向公共变量添加值,但不能直接设置它)。服务器运行整个数据库,接受来自客户端的部分日志,生成自己的日志并将其发送给客户端。

3)允许客户进行任意修改。这会导致潜在的冲突。如果发生冲突,应拒绝其中一个相互冲突的变更。这意味着,如果客户端进行了本地修改,则服务器稍后可以拒绝这些修改。用户界面必须反映此问题。其余的,这与变体2类似。