CloudKit架构设计

时间:2016-11-09 01:41:10

标签: schema cloudkit ckrecord

我使用Core Data编写了本地数据模型。它是面向对象的,所以我的核心数据模型中有这样的东西:

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 个答案:

答案 0 :(得分:1)

  
    

以这种方式设计我的CloudKit架构以避免对CKReferences进行额外的网络提取调用是否合法?

  

我会说答案是肯定的,这是一种合法的设计。

请注意,您所做的权衡是优先考虑有效使用iCloud数据库空间的高效网络呼叫。

您提出的设计将使您不止一次存储相同的信息。根据您的使用情况,这可能是理想的次数:

e.g。

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

如果这个系列继续下去,那么你在数据库中多次存储Person A,这可能被认为是浪费太多空间。另一方面,您打算如何使用数据可能是完全合理的。

我建议您将用例建模并根据usage limits that Apple provides for iCloud进行测量。