【问题标题】:Import large amount of data into coredata with unique constraint将大量数据导入具有唯一约束的 coredata
【发布时间】:2018-08-22 21:13:56
【问题描述】:

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

【问题讨论】:

    标签: ios sqlite core-data


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

    【讨论】:

    • 所以我们不需要唯一约束,对吗?一个fetch请求,你的意思是predicate = "name = "abc" or name = "abc2" or name="aas" ,...... " ?
    • 我们应该在每次请求后保存还是在导入过程结束时保存?提前致谢!
    • 更好的谓词应该使用 IN 关键字
    • 每批次后保存
    • 谢谢!我试试看
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多