0

我正在创建一个应用程序,它使用核心数据来存储来自 Web 服务器的信息。当有互联网连接时,该应用程序将检查条目中是否有任何更改并更新它们。现在,我想知道哪种方法最好。我数据库中的每个条目都有一个最后更新的时间戳。这两个中哪一个更有效:

  1. 浏览所有条目并检查时间戳以查看需要更新的条目。
  2. 删除整个实体并重新下载所有内容。

抱歉,这似乎是一个明显的问题,谢谢!

4

3 回答 3

1

我最近做了类似的事情。

我通过分配唯一 ID 和全局“更新时间戳”并考虑“增量”更改来解决问题。

我解释得更好,我在用户首选项中存储了一个全局“最新更新”变量,默认值为 01/01/2010。

这大致是我的 JSON 服务:

response: {
  metadata: {latestUpdate: 2013...ecc}
  entities: {....}
}

然后,这就是发生的事情:

  1. 将“最新更新”传递给 Web 服务并检索实体列表
  2. 更新核心数据存储
  3. 如果核心数据一切正常,则服务元数据中的“最新更新”成为我存储在用户首选项中的新“最新更新变量”

而已。我只是检索所需的更改,当然 Web 服务的结构是为了提供适当的列表。即:一个由数据库支持的网络服务,可以很好地处理这个问题,而让 iphone 只是一个“简单的客户端”。

但我不得不说,对于少量数据,在每次请求时下载整个列表仍然非常高效(并且没有更多错误)。

于 2013-08-26T10:12:55.337 回答
1

我会说选项1是最有效的,因为很少有情况下下载所有内容(尤其是在具有大量数据的大型数据库中)比只下载您需要的部分更有效。

于 2013-08-26T04:39:00.170 回答
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. 当响应到达并解析它时,您最初从实体创建一个新对象并直接填充数据。

  2. 下次,当您在服务器上执行更新时,您将条目的版本计数增加 1 并存储它。例如,假设名称 michael 现在更改为 abraham,那么服务器上 name_version 的版本计数将为 2

  3. 此更新的版本计数将包含在响应数据中。

  4. 现在,在将数据存储在同一个对象中时,如果发现版本计数相同,则可以跳过该条目的数据更新,但如果发现版本计数要更改,则需要更新该条目要完成。

这样,您可以有效地对每个条目执行检查并仅对更改的条目执行更新。

建议:

  1. 当您处理大量数据更新时,上述方法效果最佳。

  2. 在对象的简单文本条目的情况下,简单地覆盖所有条目上的数据就足够有效了。这也使数据响应模型保持简单。

于 2013-08-26T06:28:45.113 回答