我正在创建一个使用核心数据来存储来自Web服务器的信息的应用。当有互联网连接时,应用程序将检查条目是否有任何更改并更新它们。现在,我想知道哪种方式最好。我的数据库中的每个条目都有一个上次更新的时间戳。这两个中的哪一个会更有效:
对不起,如果这似乎是一个明显的问题,谢谢!
答案 0 :(得分:1)
我认为选项1
最有效率,因为很少有下载所有内容的情况(特别是在包含大量数据的大型数据库中)比仅下载您需要的部分更有效
答案 1 :(得分:1)
我最近做了类似的事情。
我通过分配唯一ID和全局“更新时间戳”并考虑“delta”更改来解决问题。
我解释得更好,我有一个存储在用户首选项中的全局“最新更新”变量,默认值为01/01/2010。
这大致是我的JSON服务:
response: {
metadata: {latestUpdate: 2013...ecc}
entities: {....}
}
然后,这是正在发生的事情:
就是这样。我只是检索所需的更改,当然,Web服务的结构是为了提供正确的列表。这是:一个由数据库支持的Web服务,可以很好地处理这个问题,并让iphone只是一个“简单的客户端”。
但我不得不说,对于少量数据,在每次请求时下载整个列表仍然非常高效(并且更无错误)。
答案 2 :(得分:0)
根据我们在上面的评论中的讨论,您可以使用版本控制(例如
)为核心数据对象条目建模CoreDataEntityPerson:
name : String
name_version : int
image : BinaryData
image_version : int
您现在可以通过以下方式为服务器xml建模:
<person>
<name>michael</name>
<name_version>1</name_version>
<image>string_converted_imageData</image>
<image_version>1</image_version>
</person>
现在,您可以按照以下步骤操作:
当响应到达并解析它时,您最初会从实体创建一个新对象并直接填充数据。
下次,当您在服务器上执行更新时,将条目的版本计数增加1并存储它。 例如。让我们说michael的名字现在改为亚伯拉罕,然后服务器上的name_version版本计数将为2
此更新版本将包含在响应数据中。
现在,同时存储在同一个对象的数据,如果发现版本计数是相同的,那么该条目的数据更新可以跳过,但如果你发现版本计数被改变,那么需要更新该条目。
通过这种方式,您可以有效地对每个条目执行检查,并仅对更改的条目执行更新。
建议:
当您处理大量数据更新时,上述方法效果最佳。
如果是对象的简单文本条目,则对所有条目的数据进行简单的覆盖就足够了。这也使数据响应模型变得简单。