离线/在线数据同步策略

问题描述 投票:0回答:5

我的要求是我有服务器 J2EE Web 应用程序和客户端 J2EE Web 应用程序。有时客户端可能会离线。当客户端上线时,他应该能够来回同步更改。另外,我应该能够根据某些过滤器/规则来控制需要同步哪些行/表。是否有任何现有的 Java 框架可以做到这一点?如果我需要自己实施,您可以建议哪些不同的策略?

我想到的一个解决方案是维护sql日志并在同步期间在另一端执行相同的语句。您认为这个策略有什么问题吗?

java database jakarta-ee data-synchronization
5个回答
29
投票

有许多用于数据同步/复制的 Java 库。我知道的两个是daffodilSymmetricDS。在前世,我愚蠢地(用Java)实现了我自己的数据复制过程。这看起来应该是相当简单的事情,但如果数据可以在多个地方同时更新,那就非常复杂了。我强烈建议您使用上述项目之一来尝试自己绕过这种复杂性的处理。


17
投票

同步的最大问题是当用户离线编辑某些内容时,同时又在线编辑该内容。您需要合并两个更改的数据,或者处理 UI 以允许用户说出哪个版本是正确的。如果你消除了两者同时编辑的可能性,那么你就不必解决这个棘手的问题。

该方法通常是在所有表中添加“已修改”字段,并将给定行中给定记录的客户端修改字段与服务器的修改日期进行比较。如果它们不匹配,则替换服务器的数据。

小心自动生成的密钥 - 当您从客户端复制到服务器时,您需要确保保持数据完整性。在服务器上再次严格运行 SQL 语句可能会让您陷入自动生成的键已更改的情况,并且突然您的外键指向与您预期不同的记录。

通常,当从其他来源导入数据时,您会跟踪外部来源的主键以及您自己的个人主键。这使得在同步困难的情况下更容易确定数据集之间的变化和差异。


5
投票

您的同步器需要确定何时可以更新数据以及何时需要人员调解潜在的冲突。我写了一篇论文,解释了如何使用日志记录和代数定律来做到这一点


0
投票

什么最适合作为应用程序中的客户端数据存储?您可以从嵌入式数据库(如 SQLite)或消息队列或某些对象存储中进行选择,或者(如果这些都不能使用,因为它是 Web 应用程序)使用 Web DB 或通过 HTML 5 的IndexedDB 保存在客户端上的文件/文档本地存储API。

查看论文Gold Rush: Mobile Transaction Middleware with Java-Object Replication。 Microsoft 偶尔连接的系统的文档描述了两种方法:面向服务或面向消息和面向数据。淘金热采取了较早的方法。后一种方法使用数据库合并复制。


-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.