gpt4 book ai didi

sql - 同步客户端-服务器数据库

转载 作者:太空狗 更新时间:2023-10-30 01:37:24 25 4
gpt4 key购买 nike

我正在寻找一些用于将中央服务器上的数据与并非总是在线的客户端应用程序同步的一般策略。

在我的特殊情况下,我有一个带有 sqlite 数据库的 android 手机应用程序和一个带有 MySQL 数据库的 PHP Web 应用程序。

用户将能够在电话应用程序和 Web 应用程序上添加和编辑信息。即使手机无法立即与服务器通信,我也需要确保在一个地方所做的更改在任何地方都能反射(reflect)出来。

我不关心如何将数据从手机传输到服务器,反之亦然。我提到我的特定技术只是因为我无法使用例如 MySQL 可用的复制功能。

我知道客户端-服务器数据同步问题已经存在很长时间了,我想了解有关处理该问题的模式的信息(文章、书籍、建议等)。我想了解处理同步以比较优势、劣势和权衡的一般策略。

最佳答案

您必须决定的第一件事是关于在发生冲突更改时哪一方被视为“权威”的一般政策。

即:假设记录 #125 于 1 月 5 日晚上 10 点在服务器上更改,并且相同的记录在 1 月 5 日晚上 11 点在其中一部电话(我们称之为客户端 A)上更改。
最后一次同步是在 1 月 3 日。然后用户在 1 月 8 日重新连接。

确定需要更改的内容很“容易”,因为客户端和服务器都知道上次同步的日期,因此自上次同步以来创建或更新的任何内容(请参阅下文了解更多信息)都需要进行协调。

所以,假设唯一改变的记录是#125。
您要么决定两者中的一个自动“获胜”并覆盖另一个,要么您需要支持协调阶段,在该阶段用户可以决定哪个版本(服务器或客户端)是正确的,覆盖另一个。

这个决定非常重要,您必须权衡客户的“角色”。特别是如果不仅在客户端和服务器之间存在潜在冲突,而且在不同客户端可以更改相同记录的情况下。

[假设#125 可以被第二个客户端(客户端 B)修改,那么尚未同步的客户端 B 可能会提供相同记录的另一个版本,从而使之前的冲突解决方案变得毫无意义]

关于上面的“创建或更新”点……如果记录起源于其中一个客户端,您如何正确识别记录(假设这在您的问题域中有意义)?
假设您的应用管理一个业务联系人列表。如果客户端 A 说您必须添加一个新创建的 John Smith,而服务器上有一个客户端 D 昨天创建的 John Smith……您是否创建了两个记录,因为您不能确定它们不是不同的人?你也会要求用户调和这个冲突吗?

客户是否拥有数据子集的“所有权”?即如果客户端 B 被设置为区域 #5 数据的“权限”,客户端 A 是否可以修改/创建区域 #5 的记录? (这将使一些冲突解决更容易,但可能证明对您的情况不可行)。

总结起来主要的问题是:

  • 考虑到分离的客户端在创建新记录之前可能尚未访问服务器,如何定义“身份”。
  • 以前的情况,无论解决方案多么复杂,都可能导致数据重复,因此您必须预见如何定期解决这些问题以及如何通知客户他们认为“记录#675”的内容实际上已被合并/取代记录#543
  • 决定是否通过法令解决冲突(例如,“如果服务器版本自上次同步以来已更新,则服务器版本始终胜过客户端”)或手动干预
  • 在法定货币的情况下,特别是如果您决定客户端优先时,您还必须注意如何处理其他尚未同步的客户端,这些客户端可能会有更多变化。
  • 前面的项目没有考虑数据的粒度(为了使描述更简单)。我只想说,不是在“记录”级别进行推理,如在我的示例中,您可能会发现在字段级别记录更改更合适。或者一次处理一组记录(例如个人记录 + 地址记录 + 联系人记录),将它们的聚合视为一种“元记录”。

  • 引用书目:
  • 当然,更多关于此的信息,请访问 Wikipedia .
  • A simple synchronization algorithm作者 Vdirsyncer
  • OBJC article on data synch
  • SyncML®: Synchronizing and Managing Your Mobile Data (在 O'Reilly Safari 上预订)
  • Conflict-free Replicated Data Types
  • Optimistic Replication YASUSHI SAITO (HP Laboratories) 和 MARC SHAPIRO (Microsoft Research Ltd.) - ACM 计算调查,卷。 V, No. N, 3 2005.
  • Alexander Traud、Juergen Nagler-Ihlein、Frank Kargl 和 Michael Weber。 2008. 通过重用 SyncML 实现循环数据同步。第九届移动数据管理国际 session (MDM '08) 的论文集。 IEEE 计算机协会,华盛顿特区,美国,​​165-172。 DOI=10.1109/MDM.2008.10 http://dx.doi.org/10.1109/MDM.2008.10
  • Lam, F.、Lam, N. 和 Wong, R. 2002。移动 XML 数据的高效同步。在第十一届信息和知识管理国际 session (麦克莱恩,弗吉尼亚州,美国,2002 年 11 月 4 日至 9 日)的 session 记录中。 CIKM '02。 ACM,纽约,纽约,153-160。 DOI= http://doi.acm.org/10.1145/584792.584820
  • Cunha, P. R. 和 Maibaum, T. S. 1981. Resource &equil;抽象数据类型 + 同步 - 一种面向消息编程的方法 -。在第五届国际软件工程 session (美国加利福尼亚州圣地亚哥,1981 年 3 月 9 日至 12 日)的 session 记录中。国际软件工程 session 。 IEEE 出版社,新泽西州皮斯卡塔韦,263-272。

  • (最后三个来自ACM数字图书馆,不知道你是不是成员(member),或者你是否可以通过其他 channel 获得)。

    来自 Dr.Dobbs网站:
  • 使用 SQL Server CE 和 SQL RDA 创建应用程序 Bill Wagner 2004 年 5 月 19 日(为桌面和移动 PC 设计应用程序的最佳实践 - Windows/.NET)

  • 来自 arxiv.org:
  • A Conflict-Free Replicated JSON Datatype - 该论文描述了 JSON CRDT 实现(无冲突复制数据类型 - CRDT - 是一系列支持并发修改并保证此类并发更新收敛的数据结构)。
  • 关于sql - 同步客户端-服务器数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3406891/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com