离线/在线数据同步策略
2022-09-01 03:14:58
我的要求是我有服务器 J2EE Web 应用程序和客户机 J2EE Web 应用程序。有时客户端可以脱机。当客户端联机时,他应该能够同步来回更改。此外,我应该能够根据某些筛选器/规则控制需要同步哪些行/表。是否有任何现有的Java框架可以做到这一点?如果我需要自己实施,您可以建议哪些不同的策略?
在我看来,一种解决方案是在同步过程中维护sql日志并在另一端执行相同的语句。你认为这个策略有什么问题吗?
我的要求是我有服务器 J2EE Web 应用程序和客户机 J2EE Web 应用程序。有时客户端可以脱机。当客户端联机时,他应该能够同步来回更改。此外,我应该能够根据某些筛选器/规则控制需要同步哪些行/表。是否有任何现有的Java框架可以做到这一点?如果我需要自己实施,您可以建议哪些不同的策略?
在我看来,一种解决方案是在同步过程中维护sql日志并在另一端执行相同的语句。你认为这个策略有什么问题吗?
有许多用于数据同步/复制的 Java 库。我知道的两个是水仙花和SymmetricDS。在前世,我愚蠢地(在Java中)实现了我自己的数据复制过程。这似乎是那种应该相当简单的事情,但是如果数据可以同时在多个地方更新,那就非常复杂了。我强烈建议您使用上述项目之一来尝试绕过自己处理这种复杂性。
同步的大问题是当用户离线编辑某些内容时,同时在线编辑它。您需要合并两个已更改的数据片段,或者处理UI以允许用户说出哪个版本是正确的。如果您消除了同时编辑两者的可能性,那么您就不必解决这个棘手的问题。
该方法通常是向所有表添加一个字段“modified”,并将给定行中给定记录的客户端修改字段与服务器的修改日期进行比较。如果它们不匹配,则替换服务器的数据。
小心自动生成的密钥 - 从客户端复制到服务器时,需要确保数据完整性得到维护。在服务器上再次严格运行 SQL 语句可能会使您处于自动生成的键已更改的情况下,并且您的外键突然指向与预期不同的记录。
通常,从其他源导入数据时,会跟踪来自外部源的主键以及您自己的个人主键。这使得在困难的同步情况下,更容易确定数据集之间的更改和差异。