【问题标题】:Time stamp in sync implementation同步实现中的时间戳
【发布时间】:2013-03-21 10:20:55
【问题描述】:

我正在为需要支持离线数据访问的多客户端应用程序实施基本同步策略。我在他对this question 的回答中使用了@Chris 的建议(非必读)。

我想补充的一个细节是能够根据上次保存的更改解决冲突,不是上次同步的更改。换句话说,如果两个客户端更新同一个项目,最后保存更改的客户端应该会获胜,即使另一个客户端稍后同步。

显然,我需要某种方法来为客户端上的每个更改添加时间戳,以便在同步时比较服务器上的时间戳。但是,我不能保证每个客户的内部时钟。

我想知道是否有既定的方法来解决这个问题?越简单越好!

【问题讨论】:

    标签: database core-data architecture sync data-synchronization


    【解决方案1】:

    我不乐意仅仅根据时间戳来逃避,我认为您需要寻找合适的版本控制解决方案。我不知道您使用的是什么语言等,但我有一个完整的库来执行此操作。即使该库不有趣,您也可能会发现它的文档在构建您自己的解决方案时很有用......它已经得到了充分的解释......

    项目在GitHub

    【讨论】:

    • 本地文件时间和服务器时间不对怎么办
    • 好问题...服务器在您的控制之下,因此它应该是正确的或至少持续递增...实际上它由可订购的唯一 ID 生成器控制...实际上它是:1)我已经按此顺序编写了此更改。 2)我按此顺序从服务器获得这些更改。 3) 我可以使用此算法合并这些更改(应用程序的开发人员可以覆盖该算法)。
    【解决方案2】:

    如果您询问客户端时钟劫持:客户端应根据从服务器获取的时间戳和从本地时钟获取的时间跨度来维护自己的内部时钟。

    所以你只需相对于服务器更新“客户端时间戳”:

    • 客户端记录有CT1更新时间;
    • 在CT2时刻连接服务器后,发现服务器时间为ST2;
    • 因此记录更新时间更改为 ST1 = ST2 - CT2 + CT1。

    另一种方法是在服务器端保持相同的转换。 (这可能更正确和安全)。

    抱歉 - 只是一个注释 - 奇怪的是你称之为“冲突解决”,而它更多的是“最后更新获胜”并且没有执行实际解决方案。

    【讨论】:

    • 感谢您对术语的注意。
    • 这是有问题的,如果本地机器上的时间不对怎么办?另外,如果在两者之间的某个地方改变了错误的时间怎么办?我有 5% 的用户在他们的机器上使用错误的时间,这可能看起来很小,但如果基数很大,可能会有数千名用户。
    最近更新 更多