5

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

有什么想法可以使用哪些技术来实现这一目标?

4

3 回答 3

2

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

我最喜欢的讨论之一是离线/在线数据同步策略

于 2012-04-18T13:13:05.857 回答
0

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

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

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

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

3) 允许客户端进行任意修改。这会导致潜在的冲突。在发生冲突的情况下,应拒绝冲突更改之一。这意味着,如果客户端进行了本地修改,那么服务器稍后可能会拒绝该修改。用户界面必须反映这个问题。在其余部分,这与变体 2 类似。

于 2012-04-18T13:30:32.273 回答
0

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

于 2012-04-18T12:47:45.023 回答