从 WebService (Json/XML) 同步数据库 (sqlite) 到 iOS

5
我有一个Web服务和SQLite数据库。在其中,Web服务将用于将数据存储到数据库中。现在我想包括同步功能-每当应用程序启动时,数据库将通过Web服务开始加载其表格的数据。
现在,当我更新我的Web服务后,数据库将相应地进行更新。我的问题是,我必须遵循哪些最佳实践来进行此更新?我应该清除整个数据库并重新开始添加所有行(我知道这需要很长时间),但如果不是这样,那么我的数据库将如何仅从Web服务添加特定数据?
谢谢。
4个回答

3
我建议您做以下几点:
  1. 在应用程序启动时,将所有的 web 服务内容先存储到数据库中。
  2. 仅从数据库中显示您的内容。
  3. 当需要刷新或重新获取数据时,仅更新数据库即可。
这样,您就可以始终从数据库中获得最新的数据。

我同意你的观点,并且第一时间就这样做了。但我的问题是,当数据库根据你的三个要点进行更新时,此时我应该仅替换新内容还是应该用新内容替换整个数据。用新数据替换旧数据将需要更多的时间。 - Vish
1
这取决于个人的需求。是的,替换需要比更新更多的时间。但是,如果整个Web服务发生变化,那么你必须替换数据库。 - Niru Mukund Shah
不是整个 Web 服务都没有变化,而只是特定对象没有变化。那么该怎么办呢? - Vish
嗯..实际上我没有得到它的完美解决方案。不管怎样,谢谢你的帮助。:) 我会尽力解决这个问题的。 - Vish

3
下载和更新整个服务器数据将会非常昂贵。它将使用更多带宽,对您的客户来说价格也高昂。与其推送整个负载(即使是小的更新),不如只发送差异部分。我建议您维护版本信息。
以下是操作步骤:
  1. 当应用程序从 Web 服务下载所需版本的数据并成功存储在数据库中时,请同时设置最新的更新版本。
  2. 下次启动应用程序时,仅向服务器发出轻量级标头请求以获取版本信息。服务器应该响应此标头请求并提供最新的数据版本号。
  3. 使用 WS 检查版本与数据库中存储的当前应用程序数据版本是否一致。如果服务器有更新版本,则开始同步。
  4. 版本更改信息应该是差异部分,例如:
    • 对于新版本,服务器只发送自上一个版本以来发生变化的信息。
    • 您的服务器应该具备计算两个版本之间差异的能力。
    • 差异信息通常具有类别,例如新数据、已更新数据、已删除数据等。
    • 根据此信息,iOS 应用程序将对数据库数据执行必要的 CRUD(创建、读取、更新和删除)操作。
  5. 一旦 iOS 应用程序更新完成,则可以将数据库版本更新为从服务器接收到的最新版本。在此之前,请让其保持未更新状态以确保适当的错误处理。
希望这可以帮助您。

1
我建议您使用 RestKit的出色Core Data支持。
通过使用RKEntityMapping,您可以将远程JSON或XML对象直接映射到数据库中的Core Data实体。
RestKit将自动为您维护数据库,从Web服务适当地插入和更新条目。(根据我的经验,我发现删除对象需要一点额外的工作,这取决于您的Web服务是否符合RESTful要求)。
RestKit确实有一个陡峭的学习曲线,但它非常值得:在几次部署后,它绝对是比手动编写自己的SQLite/Web Service同步代码更好的解决方案。

0
首先,您需要将所有Web服务内容设置到您的SQLITE中,并从SQLITE获取要显示的数据。在该SQLite表中执行操作,完成所有这些操作后,您需要将所做的更改保存到Web服务中。
按照这种方式进行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接