我面臨的情況是,我需要將一個可能很大(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