数据:导入大型数据集
我面临的情况是,我需要将一个可能很大(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)? 我也可以在加载文件时使用它吗?
我需要特别注意的任何缺陷?
感谢您的帮助!
这仅仅是我的两分钱,但你的问题并不是将数据导入到Core Data中,而是将它导入到Core Data抽象的数据存储中。
考虑到这一点,根据您的具体使用情况(例如,如果您的数据是在第一次启动时导入的),您可能有其他选择,例如:
只是一个想法...
链接地址: http://www.djcxy.com/p/47385.html上一篇: Data: Import large dataset
下一篇: @import vs #import