离线/在线数据同步策略

Adi*_*Adi 37 java database java-ee data-synchronization

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

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

Dón*_*nal 27

有许多用于数据同步/复制的Java库.我知道的两个是水仙花SymmetricDS.在以前的生活中,我愚蠢地(在Java中)实现了我自己的数据复制过程.这似乎应该是相当直接的事情,但如果数据可以在多个地方同时更新,那就太复杂了.我强烈建议您使用上述项目中的一个来尝试绕过处理这种复杂性.


Kie*_*eli 16

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

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

请注意自动生成的密钥 - 从客户端复制到服务器时,需要确保维护数据完整性.在服务器上再次严格运行SQL语句可能会使您处于自动生成的密钥已更改的情况,并且突然您的外键指向不同于您预期的记录.

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

  • 我投了这票(对不起),因为我认为它过分简化了所涉及的问题.它根本不涉及安全性或选择性同步.Stettler的论文是对这些问题的一个很好的介绍(http://www.ifi.uzh.ch/archive/mastertheses/DA_Arbeiten_2003/Stettler_Christian.pdf) (3认同)

Nor*_*sey 5

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

  • @Jen S. 链接不再可用 (3认同)
  • 关于这个问题,还有 Christian Stettler 的硕士论文: http://www.ifi.uzh.ch/archive/mastertheses/DA_Arbeiten_2003/Stettler_Christian.pdf 有很多需要解决的安全问题,本文很好地涵盖了这些问题。 (2认同)
  • Wayback Machine 有一份:https://web.archive.org/web/20101126093308/http://www.ifi.uzh.ch/archive/mastertheses/DA_Arbeiten_2003/Stettler_Christian.pdf (2认同)