CloudKit架构设计

问题描述:

我已经使用核心数据编写了本地数据模型。它是面向对象的,所以我有这样的事情在我的核心数据模型: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电话:那么沿着这行吗?

以这种方式设计我的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