代码之家  ›  专栏  ›  技术社区  ›  BigEARS

使用唯一约束将大量数据导入coredata

  •  1
  • BigEARS  · 技术社区  · 7 年前

    我有一个实体词,关键字是字符串类型的唯一约束。现在,我必须从文本文件中导入大量(>100000条记录)带有新关键字的单词。 我尝试创建coredata NSManagedObject,并使用NSPolicyObjectTrump将其插入上下文中,以合并新关键字和旧关键字。 但不幸的是,由于coredata解决冲突的过程,我在上下文上的保存项目进展缓慢(2-3分钟)。 那么,哪种方法是导入如此大量的项目并确保不违反coredata的唯一约束的最佳方法呢? 我是否应该预先创建sqlite,以及如何使用相同的对象模型迁移sqlite文件? 非常感谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jon Rose    3 年前
    1. 将阵列拆分为多个切片。每片大约有200个项目。您应该测试并调整这个数字,以便为您的应用程序找到合适的批量大小,但这个数字在我自己的应用程序中对我有用。

    2. 为每个切片创建一个操作队列和一个操作,这样就可以一次处理一个切片

    3. 对于需要处理的每个切片:

      • 获取与插入的元素具有相同ID的所有实体(使用一个获取请求)
      • 将提取的元素插入到字典中,其中键是唯一Id,值是提取的ManagedObject
      • 对于每个元素,请查看是否已有副本。如果您这样做了,则更新或忽略它(取决于您的应用程序逻辑)。如果没有,请插入
      • 在继续下一批之前保存上下文