2012-04-18 70 views
3

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

任何想法,哪些技术可以用来实现这一点?

+0

它是一个应用程序+一个在线服务器吗?或者几个应用程序+一个在线服务器或者几个应用程序+几个在线服务器,每个应用程序都有自己的在线服务器? – TacticalCoder 2012-04-18 12:47:22

+0

@TacticalCoder会有很多应用程序和一个在线数据库的实例。像Dropbox一样,但对于数据库而言,不仅仅是文件。 – 2012-04-18 12:52:35

回答

2

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

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

0

使用可用的纯Java DB实现的本地数据库之一。使用任何其他数据库作为远程数据库。 实现尝试连接到远程数据库的逻辑,并在发生故障时回退到本地数据库。如果它成功连接到远程数据库,则实现数据同步。

+0

虽然通常最好不要直接访问远程数据库。而是通过服务来访问它(Web服务,远程EJB,...)。 – Puce 2012-04-18 12:52:59

+0

这种方法的问题是同步部分。我正在寻找自动解决这个问题的解决方案。我希望当离线插入/删除几条记录时,数据库会保留一条记录并在联机时应用更改。 – 2012-04-18 12:55:51

0

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

的主要问题是如何合并由不同的情况下进行更改。可以有3个变种:

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

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

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

+0

你会如何实现?你有一个啧啧,例子或涉及的技术的链接? – iOSAndroidWindowsMobileAppsDev 2016-11-28 14:22:46

+0

@Anon不,我没有工作示例的经验,也不能推荐任何特定的实现。尝试谷歌的“Java分布式数据库”。如果我要实现这一点,那么我首先实现级别1-2并行,询问用户他想如何避免和/或解决冲突。然后,根据用户使用情况,我会实现3d级别。 – 2016-11-28 19:22:15

相关问题