5

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

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

谢谢你。

4

4 回答 4

3

我建议你的是:

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

因此,您将始终在数据库中找到所有新数据。

于 2013-07-29T05:42:10.767 回答
3

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

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

希望有帮助。

于 2013-08-07T12:02:01.857 回答
1

我建议您使用RestKit的出色核心数据支持。

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

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

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

于 2013-08-07T12:21:36.533 回答
0

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

按照这种方式。

于 2013-08-07T12:07:58.883 回答