离线/在线数据同步策略
我的要求是我有服务器J2EE Web应用程序和客户端J2EE Web应用程序。 有时客户端可以下线。 当客户端联机时,他应该能够同步来回的变化。 此外,我应该能够控制哪些行/表需要基于一些filter/规则进行同步。 有没有现成的Java框架呢? 如果我需要自己实施,你可以build议哪些不同的策略?
我脑海中的一个解决scheme是在同步期间维护sql日志并在另一侧执行相同的语句。 你看到这个策略有什么问题吗?
有许多用于数据同步/复制的Java库。 两个我知道的是水仙花和SymmetricDS 。 在以前的生活中,我愚蠢地实现了(使用Java)我自己的数据复制过程。 这似乎应该是相当直接的事情,但如果数据可以在多个地方同时更新,这是非常复杂的。 我强烈build议您使用上述项目之一来尝试绕过自己处理这种复杂性。
同步的重大问题是用户在离线状态下进行编辑,同时在线编辑。 您需要合并两个更改的数据片段,或者处理UI以允许用户说出哪个版本是正确的。 如果你消除了同时编辑的可能性,那么你不必解决这个棘手的问题。
该方法通常是为所有表添加一个“修改”字段,并将给定行中给定logging的客户端修改字段与服务器的修改date进行比较。 如果它们不匹配,则replace服务器的数据。
请注意自动生成的密钥 – 当您从客户端复制到服务器时,需要确保您的数据完整性得到维护。 在服务器上再次严格运行SQL语句可能会使您处于自动生成的密钥已更改的情况,并且突然间,您的外键指向的logging超出您的预期。
通常从其他来源导入数据时,您会跟踪来自外部来源的主键以及您自己的个人主键。 这使得确定数据集之间的变化和差异更容易进行困难的同步情况。
您的同步者需要确定何时可以更新数据,以及何时需要调解潜在的冲突。 我写了一篇文章,解释了如何使用日志和代数法来做到这一点 。
什么最适合作为应用程序中的客户端数据存储? 您可以selectembedded式数据库,如SQLite或消息队列或某些对象存储,或者通过HTML 5的LocalStorage API使用Web DB或IndexedDB保存在客户端上的文件/文档(如果这些文件都不是可用的, 。
使用Java对象复制检查Gold Rush:Mobile Transaction Middleware 。 微软偶尔连接系统的文档描述了两种方法:面向服务的或面向消息的和面向数据的。 Gold Rush采取了更早的方法。 后面的方法使用数据库合并复制。
- 确保在MVVM WPF应用程序中的UI线程上调用OnPropertyChanged()
- React-Native错误:连接到http:// localhost:8081 / debugger-proxy?role = client超时