将大量数据导入具有唯一约束的coredata

时间:2018-03-14 11:04:31

标签: ios sqlite core-data

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

1 个答案:

答案 0 :(得分:0)

  1. 将数组拆分为多个切片。每个切片应该是大约200个项目。您应该测试并调整此数字,以便为您的应用程序找到合适的批处理大小,但这个数字在我自己的应用程序中对我有用。
  2. 为每个slive创建一个操作队列和操作,这样您就可以一次处理一个切片
  3. 对于需要处理的每个切片:
    1. 获取与您要插入的元素具有相同ID的所有实体(使用ONE获取请求)
    2. 将获取的元素插入到字典中,其中键是唯一的Id,值是您提取的mananagedObject
    3. 对于每个元素,请查看您是否已复制。如果您这样做,则更新或忽略它(取决于您的应用程序逻辑)。如果你没有,那么插入它
  4. 在继续下一批之前保存上下文