我希望以前沒有問過這個問題,我搜索了一個類似的問題,但找不到與我的案例足夠接近的內容。CoreData - 在實體上有很多關係時的性能
基本上,我的問題是如果CoreData可以處理大量的關係(大,我的意思是可能高達30對某些實體),而不是太慢。
我有這些實體(只是作爲示範):
Resources (contains all Resources for an object)
ProcessA
ProcessB
ProcessC
ProcessD
ProcessE
... (many more)
所需的各種任務。這些過程,但幾乎所有的人都需要有Resources
一個一對一(或者一對多)的關係。
有時,他們甚至需要多個關係到Resources
(currentResources
和oldResources
或其他)。這就是爲什麼我需要添加一個反向關係(如果我沒有反向,它實際上會導致問題,我不知道爲什麼)。
由於逆時,Relationships
實體開始是這樣的:
Resources
someAttribute
...
---
-> inverseOfProcessA
-> inverseOfProcessB
-> inverseOfProcessC
-> inverseOfProcessD
-> inverseOfProcessE
-> ...
它變得充滿了,我將永遠需要從這個方面來訪問反向關係(他們只需要在那裏阻止一些奇怪的事情發生)。
我讀到faulting
的概念。我的理解是正確的,當我獲取一個Resources
對象時,它實際上並沒有加載所有關係?如果是這樣,faulting
有多高效?因爲它必須填寫所有與fault
對象的關係。這是我不確定的部分。當一個實體有很多關係時,這會影響性能嗎?
對不起,如果這是一個微不足道的問題。答案可能是顯而易見的,但我剛開始擔心性能,這讓我感興趣(儘管我在文檔中閱讀了大約faults
,但這並不是100%清楚)
我以前只是這樣做的(使用一個'Process'就像你說的那樣)。它導致了難看,複雜和難以維護的代碼(在我的情況下,沒有更漂亮的方式)。另外,每個進程都需要具有不同類型的屬性和關係(例如,'ProcessA'需要保存3個字符串和一個Float,而'ProcessB'需要3個整數和一個日期。我需要有許多「通用」屬性(比如'string1','string2','integer1',...),這些都很醜陋。我有一個解決方法,但更糟糕。 – Quantm
這就是爲什麼我切換到單目的實體,這導致了非常清晰和易於維護的代碼,並且更容易處理。有人告訴我,一直以來只有一個目標是一個好主意。 – Quantm
我瞭解您的問題,但您必須找到解決方法,因爲即使您持有Resource對象,您如何知道哪個關係指向正確的流程?嘗試添加其他實體以將您的模型分解爲其他片段或使用父實體。 – McNight