【发布时间】:2014-06-25 16:28:31
【问题描述】:
我面临需要将一个可能很大(20.000+)的数据集导入核心数据的情况。数据以 JSON 格式从 Web 服务中检索。至于导入,它是一种简单的更新或创建类型的东西,也代表了一个层次结构,因此对于每个实体,我都设置了一个父实体(当然顶级实体除外)。目前该进程运行速度太慢,可能占用大量内存。所以我必须优化,我对这样做的最佳实践有疑问。
首先,我使用一个单独的线程和一个子 NSManagedObjectContext 来导入,这样我的 UI 线程就不会卡住。基本原理是有效的。
首先我想批量处理数据。可能最好的解决方案是只解析对象的一部分 JSON 答案,然后处理它们。然后我将实现https://developer.apple.com/library/mac/DOCUMENTATION/Cocoa/Conceptual/CoreData/Articles/cdImporting.html 中描述的查找或创建效率。
我的问题是:
合适的批量大小是多少? 1000?
由于我需要为每个实体查找并设置父实体,我的方法是在没有父实体的情况下处理批处理后的第二次迭代中执行此操作。这样我也可以为父母做批量提取。这是个好主意/有没有更好的方法?
-
每批之后,我都会重置子 MOC 并保存在父 MOC 中。这够了吗?我还需要做更多吗?
[self.childmoc reset]; dispatch_async(dispatch_get_main_queue(), ^(void) { [self.moc save]; }); 目前我通过能够自动解析 JSON 的 AFNetworking 加载数据。在重构时,将收到的答案拆分为单独的文件(每个文件一批)而不破坏 json 对象的最佳方法是什么? AFNetworking 使用什么 JSON 解析器 (AFJSONResponseSerializer)?我也可以在加载文件时使用它吗?
我需要特别注意哪些陷阱?
感谢您的帮助!
【问题讨论】:
-
关于最佳批量大小,您最好尝试一下。测试几个,看看哪一个效果最快
标签: ios objective-c core-data import