【问题标题】:Syncing Database (sqlite) from WebService(Json/XML) for iOS从 iOS 的 WebService(Json/XML) 同步数据库 (sqlite)
【发布时间】:2013-07-28 19:23:04
【问题描述】:

我有一个 Web 服务和 sqlite 数据库。在此,Web 服务将用于在数据库中存储数据。现在我想将同步功能包括在内 - 每当应用程序启动时,数据库将开始通过 Web 服务加载其表的数据。

现在,当我更新我的网络服务一段时间后,数据库将相应更新。我的问题是,对于此更新,我必须遵循哪些最佳实践。我是否应该清除整个数据库并重新开始添加所有行(我知道这将花费很多时间)但如果不是这样,那么我的数据库如何仅添加来自 Web 服务的特定数据?

谢谢。

【问题讨论】:

    标签: iphone ios database sqlite ios6


    【解决方案1】:

    事实证明,下载和更新整个服务器数据会很昂贵。它将使用更多带宽并证明对您的客户来说成本高昂。与其推送整个负载(即使是小更新),不如发送一个增量。我会建议你维护版本信息。

    1. 当应用程序从 Web 服务下载该版本的数据并成功存储在数据库中时,在数据库中设置当前更新的版本。
    2. 当应用程序下次启动时,发出轻量级标头请求以仅从服务器获取版本信息。服务器应使用最新的数据版本号响应此标头请求。
    3. 使用存储在数据库中的当前应用程序数据版本检查来自 WS 的版本。如果服务器有更新版本,请开始同步。
    4. 版本更改信息应为 delta,即
      • 对于新版本,服务器应仅发送自设备可用版本以来更改的信息。
      • 您的服务器应该能够计算两个版本之间的差异。
      • 增量信息通常包含新数据、更新数据、已删除数据等部分。
      • 基于此,iOS 应用将对 DB 数据进行必要的 CRUD(创建、读取、更新和删除)操作。
    5. 一旦 iOS 应用程序自行更新,您就可以将数据库版本更新为从服务器接收到的最新版本。在此之前,让它保持脏状态以进行正确的错误处理。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      我建议您使用RestKit 的卓越核心数据支持。

      通过使用RKEntityMapping,您可以将远程对象从 JSON 或 XML 直接映射到数据库中的 Core Data 实体。

      RestKit 将自动为您维护数据库,从您的 Web 服务中插入和更新条目。 (根据我的经验,我发现删除对象需要一些额外的工作,具体取决于您的 Web 服务的 RESTful 程度)。

      RestKit 确实有一个学习曲线,但它非常值得:现在已经部署了几次,这绝对是一个比手动编写自己的 SQLite/Web 服务同步代码更好的解决方案。

      【讨论】:

        【解决方案3】:

        首先,您需要将所有 web 服务内容设置到您的 SQLITE 中。您想要显示的内容从 SQLITE 获取该数据。然后对该 sqlite 表执行操作,当所有这些完成后,您需要进行的更改将其保存到 web 服务中.

        沿着这条路走。

        【讨论】:

          【解决方案4】:

          我的建议是:

          1. 在应用启动时首先将所有 Web 服务内容存储到 db 中。
          2. 仅从 db 在屏幕上显示您的内容。
          3. 再次,当您需要刷新或调用数据时,只需更新数据库即可。

          因此,您总能在数据库中找到所有新数据。

          【讨论】:

          • 我同意你的观点,我第一次这样做。但我的问题是当数据库根据你的 3 点更新时,那时我应该只替换新内容还是应该用新内容替换整个数据。用新数据替换旧数据需要更多时间。
          • 看个人需求。是的,更换将比更新花费更多的时间。但是,如果整个 web 服务发生变化,则必须更换数据库。
          • 没有变化不是在整个 web 服务中而是仅针对特定对象。那该怎么办呢?
          • M.. 好吧,实际上我没有得到完美的解决方案。无论如何thanx的帮助。 :) 会尽力解决这个问题。
          猜你喜欢
          • 2012-07-06
          • 1970-01-01
          • 1970-01-01
          • 2012-10-06
          • 2012-07-07
          • 1970-01-01
          • 2011-09-14
          • 2016-11-12
          • 1970-01-01
          相关资源
          最近更新 更多