Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone数据库&;服务器数据库-iPhone仅更新修改_Iphone_Sql Server_Xcode_Sqlite - Fatal编程技术网

iPhone数据库&;服务器数据库-iPhone仅更新修改

iPhone数据库&;服务器数据库-iPhone仅更新修改,iphone,sql-server,xcode,sqlite,Iphone,Sql Server,Xcode,Sqlite,我有一些疑问。首先,让我们来看一个iPhone应用程序流,这是一个普通应用程序的流程。(基于内容的应用程序) 应用程序启动并检查网络可用性 如果网络可用-iPhone使用web服务或API下载数据 我们可以将这些响应(web服务响应/api响应)存储到*.plist文件中 当我们需要更新数据时,再次调用web服务&再次将整个数据存储在*.plist文件中 现在,假设服务器上有一个表“eBooks”&它有500多个条目 调用API/web服务将给出500条记录的响应 OK—第一次可以等待所有响应

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

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

  • 现在,假设服务器上有一个表“eBooks”&它有500多个条目

  • 调用API/web服务将给出500条记录的响应
  • OK—第一次可以等待所有响应(我们可能会使用LIBXML2作为块)
  • 但是,如果我们经常使用web服务下载它呢
这里有两个缺点

  • 无线上网不必要的使用
  • iPhone CPU开销
  • 服务器CPU开销
你明白了吗

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

让我再次澄清——这个问题

假定

  • 应用程序的服务器+数据库=客户(当前有500条记录)
  • 有5台iPhone可以检索这些数据
  • 所有iPhone都离线下载了500条记录
  • 现在,服务器添加了一条新记录501
  • iPhone必须只下载一条记录,而不是501

这是怎么可能的?

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

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

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


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

@Claus Broch-想法很好-请您再简短一点好吗?@Claus Broch-因此,iPhone将在向服务器调用web服务时提供timestap,服务器将检查数据库的每条记录的时间戳。serverTimeStamp==iPhoneTimeStamp-针对每个记录。假设有500个iPhone应用程序用户。服务器会发生什么情况?我假定您将数据保存在某种数据库中,因此只需构造一个执行筛选的SQL语句即可(例如,类似于“SELECT*from TABLE mydata WHERE timestamp>=querystamp”)。与每次提供完整内容相比,服务器的过滤负载可能会更少。不过,这只是一个粗略的估算,您的里程数可能会有所不同。但删除的记录呢?假设401&302记录已删除-在这种情况下该怎么办?对于“已删除”记录,实际上不删除它们,而是在数据库中将它们标记为已删除。您需要在数据库中设计表,因此这只会占用用于更改管理的字段的空间。实际上,数据可以放在不同的表中。为什么寻呼需要wifi?