2010-05-04 68 views
0

我有一些查询。首先让我们来看一个正常应用程序所具有的iPhone应用程序流程。 (基于内容的应用程序)iPhone数据库和服务器数据库 - iPhone只更新修改

  • 应用推出&检查网络可用性
  • 如果网络可用 - iPhone使用Web服务或API
  • 我们可以存储这些响应(Web服务响应/ API将数据下载响应)到* .plist文件中。
  • 当我们需要更新数据时,再次将web服务名为&再次将整个数据存储为* .plist文件。

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

  • 调用API/Web服务将给出500条记录的响应。
  • 确定 - 第一次可以等待所有响应(我们可能会使用LIBXML2作为块)
  • 但是如果我们经常使用web服务下载此文件会怎么样。

这里有两个缺点

  • 无线上网的不必要使用
  • iPhone的CPU开销
  • 服务器的CPU开销。

你正在接近我吗?

假设服务器上没有改变为什么iPhone需要再次调用API。意思是没有变化的条目&条目是500,因为它是那么为什么要再次下载它?

让我再次澄清 - 问题。

假设

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

这怎么可能?

回答

1

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

进行查询时,会提供一个字段,指示客户端已知的最新时间戳。对于第一个查询,这将会像Epoch一样。对于后续查询,它将是最后一次更新。

服务器将不得不筛选条目,因此它只会返回自提供的时间戳以来已更改的条目。

+0

@克劳斯布洛克 - 想法很好 - 你能给我一些简要的介绍吗? – 2010-05-04 09:45:24

+0

@Claus Broch - 因此,iPhone在调用Web服务时会给出时间戳,服务器和服务器将检查每个数据库记录的时间戳记。 serverTimeStamp == iPhoneTimeStamp - 用于每条记录。假设有500个iPhone应用程序用户。服务器会发生什么? – 2010-05-04 09:47:09

+1

我假设你在某种数据库中存储数据,所以它只是构造一个执行过滤的SQL语句(例如类似于“SELECT * from table mydata WHERE timestamp> = querystamp”)的事情。可能服务器会比每次提供完整内容的过滤更少。然而,这只是一个粗略的猜测,你的里程可能会有所不同。 – 2010-05-04 11:04:47

0

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

+0

为什么无线网络需要寻呼? – nduplessis 2010-05-04 11:25:29