【问题标题】:Updating core data performance更新核心数据性能
【发布时间】:2013-08-26 04:20:28
【问题描述】:

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

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

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

【问题讨论】:

  • 你能控制 web-server 的实现吗?比如你可以改变网络服务?
  • 是的,我有控制权:)

标签: ios performance core-data


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我最近做了类似的事情。

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

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

    这大致是我的 JSON 服务:

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

    那么,这是怎么回事:

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

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

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

    【讨论】:

    • 谢谢您,我有大约 300 个条目...每次连接到网络时我应该重新下载所有内容吗?
    • 嗯,“网络说话”可以是相当多的数据。如果您在每个实体中也有很多文本,我会做一些测试,尤其是连接到 3G 网络的设备。
    【解决方案3】:

    根据我们在上面 cmets 中的讨论,您可以像这样使用版本控制对核心数据对象条目进行建模

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      相关资源
      最近更新 更多