【问题标题】:iPhone Database & Server Database - iPhone updates only modificationsiPhone 数据库和服务器数据库 - iPhone 仅更新修改
【发布时间】:2010-05-04 09:26:33
【问题描述】:

我有一些疑问。首先,让我们有一个普通应用程序具有的 iPhone 应用程序流程。 (基于内容的应用程序)

  • 应用程序启动并检查网络可用性
  • 如果网络可用 - iPhone 使用 Web 服务或 API 下载数据
  • 我们可以将这些响应(Web 服务响应/api 响应)存储到 *.plist 文件中。
  • 当我们需要更新数据时,再次调用 Web 服务并再次将整个数据存储在 *.plist 文件中。

  • 现在,假设 - 我在服务器上有一个表“电子书”,它有超过 500 个条目。

  • 调用 API/Web 服务将给出 500 条记录的响应。
  • OK - 第一次可以等待所有响应(我们可能使用 LIBXML2 处理块)
  • 但是,如果我们经常使用 Web 服务下载它会怎样。

这里有两个缺点

  • Wifi 不必要的使用
  • iPhone CPU 开销
  • 服务器 CPU 开销。

你在找我吗?

假设服务器没有改变为什么 iPhone 需要再次调用 API。表示条目没有变化&条目是500,那为什么要重新下载呢?

让我再次澄清一下 - 问题。

假设

  • 一个应用程序有一个服务器 + 数据库 = 客户(目前 500 条记录)
  • 有 5 部 iPhone 检索此数据
  • 所有 iPhone 已离线下载 500 条记录
  • 现在,服务器添加了一条新记录 501
  • iPhone 必须只下载 1 条记录,而不是 501。

这怎么可能?

【问题讨论】:

    标签: iphone sql-server xcode sqlite


    【解决方案1】:

    您可以为每个条目添加时间戳。每次在服务器端进行更改、添加或删除时,都会更新此时间戳。

    在进行查询时,您需要提供一个字段来指示客户端已知的最新时间戳。对于第一个查询,这类似于 Epoch。对于后续查询,这将是最后一次已知更新。

    然后服务器必须过滤条目,因此它只返回那些自提供的时间戳以来已更改的条目。

    【讨论】:

    • @Claus Broch - 想法很棒 - 你能再简单点吗?
    • @Claus Broch - 因此,iPhone 将在向服务器调用 Web 服务时提供时间戳,并且服务器将检查数据库的每条记录的时间戳。 serverTimeStamp==iPhoneTimeStamp - 每条记录。假设有 500 个 iPhone 应用程序用户。服务器会发生什么?
    • 我假设您将数据保存在某种数据库中,因此只需构建一个执行过滤的 SQL 语句(例如,类似于“SELECT * from TABLE mydata WHERE timestamp > = 查询戳") 。与每次提供完整内容相比,服务器的过滤负载可能会更少。然而,这只是一个粗略的估计,您的里程可能会有所不同。
    • 但是删除的记录呢?假设删除了 401 和 302 条记录 - 在这种情况下该怎么办?
    • 对于“已删除”记录,您实际上并没有删除它们,而是在数据库中将它们标记为已删除。您将需要在数据库中设计表,因此这只占用用于更改管理的字段的空间。然后,实际数据可以位于不同的表中。
    【解决方案2】:

    您可以非常轻松地在服务器应用上实现分页,让您的客户端限制检索到的条目数。您还可以实现某种可以在 iPhone 客户端上缓存的唯一标识符,然后在请求更新时发送您缓存的最后一个项目的唯一标识符。当您的服务器发送响应时,它应该只提供比您缓存的最后一个项目更新的项目。

    【讨论】:

    • 为什么寻呼需要wifi?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多