【问题标题】:Best practice for synchronising list data between database and PhoneGap application在数据库和PhoneGap应用程序之间同步列表数据的最佳实践
【发布时间】:2016-01-22 19:08:46
【问题描述】:

场景

我有以下组成检查样式应用程序的组件

  • Web 应用程序(安排新的检查和更新/删除已安排的检查,直到它们被发送到设备)
  • 数据库(存储定期检查)
  • WCF Restful 服务(根据请求返回设备用户的最新计划数据)
  • 还有一个 PhoneGap 应用程序(显示设备用户的计划检查列表,将从 WCF 服务返回的数据存储在本地存储中)

它将从网络用户开始为移动用户安排新的检查并将其保存到数据库中。设备用户将登录移动应用程序并刷新他们的计划列表,以便将最新的计划项目返回并显示给他们。然后,网络用户可以随时创建/更新/或删除检查。

问题

每次设备用户刷新他们的日程安排列表时,他们的所有日程安排数据都会返回并添加到本地存储中。这意味着将创建重复项,因为某些数据可能已经在设备上。

决议

为了防止重复发生,我将在数据库中添加一个额外的字段以将项目标记为“由应用程序接收”,以便下次设备用户刷新他们的计划列表时可以忽略标记的项目,并停止网络用户更新或删除它们。

此决议存在漏洞

  1. 如果我在返回列表时在 Web 服务中将项目标记为“由应用程序接收”,则从 WCF 服务返回数据与设备接收数据之间可能存在错误,这意味着它从未到达设备。这可能会导致项目被标记为“在设备上”,而实际上它们不是。
  2. 或者,如果我选择等到设备接收到列表,然后将消息发送回数据库,说明设备已收到项目,则由于没有 Internet 连接,可能不会立即发送此消息。这意味着门户网站用户可以更新/删除用户的预定项目,即使它在他们的设备上。

我的问题

我想知道是否有人有有效的解决方案来管理这个漏洞,或者我是否应该改变场景中的任何步骤来阻止这个漏洞的出现?

【问题讨论】:

    标签: cordova local-storage hybrid-mobile-app wcf-rest data-synchronization


    【解决方案1】:

    您可以使用时间戳来检查本地存储上次更新的时间。对于对数据库的每个请求,您都可以将本地存储时间戳与数据库时间戳进行比较,并仅获取在时间戳之后创建的时间戳。

    【讨论】:

    • 感谢您的回答,有趣的是我在移动应用程序的另一部分使用时间戳进行数据同步!哈哈。我认为这就是你所说的隧道视野,因为我什至没有考虑过这种方法。
    • @我很高兴知道这一点!
    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多