2016-11-09 108 views
1

我已經使用核心數據編寫了本地數據模型。它是面向對象的,所以我有這樣的事情在我的核心數據模型:CloudKit架構設計

class Pair { 
    var uuid: NSUUID 
    var me: Person 
    var friend: Person 
} 

class Person { 
    var name: String 
    var birthday: NSDate 
    var address: Address 
} 

class Address { 
    var streetNumber: Int16 
    var streetName: String 
    var zip: Int16 
} 

現在CloudKit,我意識到,如果我要得到一個「對」和它的所有數據,我做「人「和」地址「CKReference然後我將不得不取得」人「和」地址「這是兩個額外的網絡調用和大量的邏輯異步處理他們的結果。所以我正在考慮將這些數據「反規格化」,並將其全部放入CloudKit架構中的「Pair」CKRecord,而不需要任何CKReference

class CloudKitPair { 
    var uuid: NSUUID 
    var myName: String 
    var myBirthday: NSDate 
    var myStreetNumber: Int16 
    var myStreetName: String 
    var myZip: Int16 
    var friendName: String 
    var friendBirthday: NSDate 
    var friendStreetNumber: Int16 
    var friendStreetName: String 
    var friendZip: Int16 
} 

難道是合法的設計我CloudKit模式,這樣既避免額外的網絡獲取用於CKReferences電話:那麼沿着這行嗎?

回答

1

以這種方式設計我的CloudKit架構以避免CKReferences的額外網絡抓取調用是否合法?

我想說的答案是肯定的,它是一個合法的設計。

請注意,您正在進行的折衷是優先考慮高效使用iCloud數據庫空間的有效網絡調用。

您提出的設計會導致您多次存儲相同的信息。根據您的使用情況,這可能會比理想的多得多:

例如,

  • Person A < -pairs與 - >Person B
  • Person A < -pairs與 - >Person C
  • Person A < -pairs與 - >Person D

如果這個系列繼續更遠,那麼你在數據庫中多次存儲Person A,這可能被認爲是太大的空間浪費。另一方面,您打算如何使用這些數據可能是完全合理的。

我建議你建立你的用例建模和測量他們對usage limits that Apple provides for iCloud