我有iOS Core Data性能問題。使用子查詢提取高效CoreData
假設我們有2個類:「Class_A」和「Class_B」。他們兩人都有自己的ID和彼此之間的一對一關係。
現在讓我們假設我是從,讓我來創建這些類(數據中包含的ID類A和B,以及信息對他們的關係)的網絡下載數據。例如:
- 「會有Class_A的實例與ID = 1」
- 「會有Class_A的實例與ID = 2」
- 「會有Class_A的實例與ID = 3 「
- 」會有Class_B的實例與ID = 10「
- 」會有Class_B的實例與ID = 11「
- 」會有Class_B的實例與ID = 12「
- 」 Class_A與id = 1將與Class_B連接使用id = 12"
- 「Class_A使用id = 2將與Class_B連接使用id = 11」
- 「Class_A使用id = 3將與Class_B連接使用id = 10」
因爲所有這些信息都可以以隨機順序獲得(例如有關X和Y類之間的連接的信息可以在有關類X和Y存在的信息之前下載),所以我使用了另一種實體:關係。
關係包含2個欄位:class_A_id和class_b_id
每當收到關於ClassA和ClassB的關係的數據,我創建關係實體的實例與根據屬性的值。
比每隔一定時間我遍歷「關係」的實體的所有實例,並試圖建立這樣的關係,正確:
- 取「的關係」實體
- 的所有實例每個取得的關係根據class_A_id和class_B_id存儲在關係中的ClassA和ClassB的實例如果兩個 - ClassA和ClassB的實例存在 - 在它們之間建立關係。
- 從CoreData
刪除實例關係實現這個算法我已經想通了它具有相當低的數量在覈心數據對象的使用時效果很好之後。 問題是,我存儲了成千上萬的「關係」實體(關於它們的信息首先被下載),而關於「ClassA」和「ClassB」存在的信息則被下載的頻率較低。
結果是,每次我嘗試使用「關係」實體創建關係時,我都會獲取數千個包含不存在的類的ID的對象!
所以我解決這個問題是要提高算法的第一步:
而是獲取在CoreData的所有關係,只獲取這些包含存在於系統類的ID。
在SQL它可能看起來是這樣的:
SELECT * from 'Relationship' where
(SELECT * from 'ClassA' where id == class_A_id).count == 1
AND
(SELECT * from 'ClassB' where id == class_B_id).count == 1
我的問題是 - 如何實現這樣的查詢中CoreData?在那裏使用子查詢?是的 - 如何? :)
而是做這種方式的,你能不能扔掉你的關係實體,而不僅僅是創建實例ClassA和ClassB,並通過他們的關係將它們連接起來?您可以向這些實體添加一個屬性來表明它是佔位符而不是完全填充的實體? –
你也可以模仿你SQL的方式:當你收到X類和Y類時,你可以檢查關係。當您收到關係數據時,您可以檢查Class_A和Class_B。但AE的建議可能會更好。 – user523234
好吧,你可能已經猜到了我的真實應用中的模型有點複雜 - 類「ClassA」和「ClassB」具有比「id」更多的屬性,填充這些屬性所需的數據不會進入只包含它們之間關係的Web響應。 由於我的應用程序的結構,我無法創建這些分類的「假」實體(只有「id」字段填充) - 我需要創建它們才能獲得有關它們的完整信息。 我簡化了我的問題,以便更清楚地問我的問題 – Axadiw