【问题标题】:Core data and server data sync核心数据和服务器数据同步
【发布时间】:2015-06-06 20:38:07
【问题描述】:

首先,在这个问题中,我没有对任何数据库提出任何抱怨,这只是我不知道并且需要提高自己的东西。

我开发了一个包含 coredata 的应用程序,它有近 5 到 6 个表格,例如工作、员工等。好吧,现在关于 coredata 的几点。

  • Coredata 自动管理主键管理我们不需要在每个表中创建 PK
  • Myserver 包含主键,例如job_id , emp_id 自动递增 现在在我的应用程序中,我必须将我的数据与服务器同步,当我在表中添加任何条目时,相应的字段作业或 emp id 将按预期为零,我无法在此字段中创建自己的值。

所以现在每 30 分钟我必须创建一个包含表数组的 JSON,该表应该获取用户在这 30 分钟内执行的最新数据库记录,例如添加更新删除,所以我需要一种可以同步的机制我的服务器和服务器的数据也表明需要添加或更新或删除此行。

我尝试了以下几种可能性,但我仍然没有完美地取得成功

  1. 我创建了 3 个字段 createdtimestamp、updatedtimestamp 和 deletedtimestamp 所以当用户第一次添加一个条目时,它将是 设备时间的 createdtimestamp 因为应用可以离线运行。
  2. 因此,如果用户更新,我会在各自的操作中更新其他时间戳 任何记录或删除任何记录。但为了获得更新 服务器,我们必须获取带有服务器时间戳的最新条目 但在这种情况下,如果 iser 时间戳与服务器不匹配,则 这个案子失败了。

所以我需要这个社区的建议。 谢谢。

【问题讨论】:

    标签: ios database core-data


    【解决方案1】:

    您的服务器可能需要一个 CRUD(创建、读取、更新、删除)类型的 API。请求应该在离线时排队并重复发送,直到收到有效的响应,服务器应该优雅地处理重复的请求。

    要处理添加,您可以使用一些参数调用诸如“createJob”之类的方法,并从服务器接收一个 id,然后您可以使用它来填充 job_id 字段。

    要处理在服务器端所做的更改,您基本上需要在本地存储的“最后更新”时间戳,您将与服务器同步并提供您之前收到(并存储)或零(从未收到过)的最新时间戳)。然后,服务器将返回在此时间点之后发生更改的所有内容以及应用程序下次需要发送的新时间戳(上次更改)。响应应包含足够的信息以更新当前状态并解决任何冲突。

    要处理已删除状态,您的记录可以有一个“隐藏”标志来指示它是否已被删除(这称为“软删除”),这有助于参考完整性,但如果您确定可以从服务器收到有效的“deleteJob”响应后,您可以在不破坏任何关系的情况下清除记录。

    如果不构建您的解决方案,我就无法提供更多帮助。但是,有各种工具可以帮助经验不足的开发人员处理此过程,例如 RESTKit。在服务器端,您可以查看 Node.js 或 ruby​​ on rails 或其他任何为您处理 REST 的东西。

    您可以使用不同的 HTTP 方法来实现此目的,而无需使用多个端点,如 RFC2616 中所定义。

    【讨论】:

    • 谢谢伙计,但我怎么知道哪些数据将被更新,因为客户端的 id 将为零,当服务器返回两条记录时,我如何确保它需要添加或需要会更新吗?
    • 如果 id 为零,则为添加,如果为非零,则为更新/删除。您应该确保在本地更新您的数据之前发送任何待处理的添加,以防您发送了两次但未能收到有效响应,以确保我们不会创建重复记录(带有 id 和一个没有身份证的人)。
    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2012-08-11
    • 2010-10-18
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多