gpt4 book ai didi

ios - 核心数据:导入大型数据集

转载 作者:行者123 更新时间:2023-11-29 12:46:38 26 4
gpt4 key购买 nike

我面临这样一种情况,我需要将一个可能很大 (20.000+) 的数据集导入到核心数据中。数据以 JSON 格式从 Web 服务中检索。至于导入,它是一种简单的更新或创建的东西,也代表了一个层次结构,所以对于每个实体我都设置了一个父实体(当然顶级实体除外)。目前该进程运行速度太慢,可能占用了太多内存。所以我必须进行优化,并且我对这样做的最佳实践有疑问。

首先,我使用一个带有子 NSManagedObjectContext 的单独线程进行导入,这样我的 UI 线程就不会卡住。基本原理是有效的。

首先我想批量处理数据。可能最好的解决方案是只解析对象的一部分 JSON 答案,然后处理它们。然后我将实现 https://developer.apple.com/library/mac/DOCUMENTATION/Cocoa/Conceptual/CoreData/Articles/cdImporting.html 中描述的查找或创建效率.

我的问题是:

  • 好的批量大小是多少? 1000?

  • 由于我需要为每个实体查找并设置一个父实体,我的方法是在没有父实体的情况下处理该批处理后,在第二次迭代中执行此操作。这样我也可以为 parent 进行批量提取。这是个好主意/有更好的方法吗?

  • 在每批处理之后,我都会重置子 MOC 并保存在父 moc 中。这够了吗?我需要做更多吗?

    [self.childmoc reset];
    dispatch_async(dispatch_get_main_queue(), ^(void) {
    [self.moc save];
    });
  • 目前我通过 AFNetworking 加载数据,它能够自动解析 JSON。重构时,在不破坏 json 对象的情况下,将收到的答案拆分为单独的文件(每个文件一批)的最佳方法是什么? AFNetworking 使用什么 JSON 解析器 (AFJSONResponseSerializer)?我也可以在加载文件时使用它吗?

  • 有什么需要特别注意的陷阱吗?

感谢您的帮助!

最佳答案

这只是我的两分钱,但您的问题不是将数据导入 Core Data,而是将其导入 Core Data 抽象的数据存储。

考虑到这一点,您可能有其他选择,具体取决于您的特定用例(例如,如果您的数据是在首次启动时导入的),例如:

  • 不使用 Core Data 进行导入,而是直接使用 sqlite。然后在完成后(重新)初始化核心数据堆栈
  • 如果您控制该服务并且它不是一个公共(public) API,则可能会添加一个端点,让您可以直接在种子 .sqlite 文件中进行流式传输。尽管如果您需要进行创建或更新,那可能不是最好的主意。同样,这取决于您的用例。

只是一个想法...

关于ios - 核心数据:导入大型数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23539079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com