我面临的情况是,我需要将一个可能很大(20.000+)的数据集导入到核心数据中。数据以JSON格式从Web服务中检索。至于导入它是一种简单的更新或创建类型的东西,也代表了一个hierachichal结构,因此对于我设置父实体的每个实体(当然顶级除外)。目前这个过程运行得太慢,可能会占用大量内存。所以我必须进行优化,并且我有关于这样做的最佳实践的问题。核心数据:导入大型数据集
首先,我使用一个单独的线程与儿童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]; });
当前我通过AFNetworking加载数据,它能够自动进行JSON解析。何时重构什么是将接收到的答案拆分为单独文件(每批一个)而不破坏json对象的最佳方式? AFNetworking使用什么JSON解析器(AFJSONResponseSerializer)?我也可以在加载文件时使用它吗?
我需要特别注意的任何缺陷?
感谢您的帮助!
关于最优批量大小,你最好的选择它来尝试一下,看看。测试几个,看看哪一个工作最快 – dandan78