【问题标题】:Large data insert in Core Data and relationships在核心数据和关系中插入大数据
【发布时间】:2014-01-02 15:51:21
【问题描述】:

Apple 的文档指出,为了在基于核心数据的 iOS 7 应用程序中高效插入批量数据,必须首先执行直接插入,而将第一阶段的关系放在一边。然后在第二阶段执行更新,然后关系进入场景。

我的问题是:对于在与其他表有关系的表中批量插入 400000 条记录,应用程序首先运行一个循环 400000 以执行直接插入然后再执行另一个循环 400000 到建立表之间的关系?

是否有任何有效的方法可以做到这一点,或者只需要遵循上述顺序?

【问题讨论】:

    标签: objective-c core-data


    【解决方案1】:

    我的建议是批量执行导入操作。所以,比如导入前N个数据,保存和重置等等。这种机制允许您管理内存占用,并且如果您愿意,允许用户使用初始数据,即在您导入剩余批次时,用户可以与初始批次进行交互。

    要计算 N,您应该依赖 Core Data Instrument,因为它是获取导入操作的客观时间的唯一方法。我想没有其他办法了。

    在我的其他 SO 回复中,您可以找到一些很好的参考资料,这些参考资料描述了导入数据的最佳方法:Core Data Fetch requests slow on large data set

    【讨论】:

    • 批处理是平衡磁盘 I/O 的好方法,但在关系验证性能方面没有任何优势。
    • @ImHuntingWabbits 我同意你的看法。无论如何,根据我的经验,唯一要做的就是衡量导入阶段以改进它。
    【解决方案2】:

    两次运行 400k 记录插入的成本很高。然而,关系验证的成本很高,这就是为什么文档建议将它们排除在初始插入之外的原因。

    您还可以计算在初始插入期间需要连接的关系,从而限制第二遍的持续时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      相关资源
      最近更新 更多