CloudKit 架构设计
CloudKit schema design
我已经使用 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 中,我意识到如果我想获得 "Pair" 及其所有数据,我将 "Person" 和 "Address" CKReference
然后我将不得不获取 "Person" 和 "Address",这是两个额外的网络调用和大量逻辑来异步处理它们的结果。所以我在考虑 "denormalizing" 这个数据并将其全部放入 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 的额外网络提取调用是否合法?
Is it legitimate to design my CloudKit schema this way to avoid extra network fetch calls for CKReferences?
我会说答案是肯定的,这是一个合法的设计。
请注意,您所做的权衡是优先考虑有效的网络调用而不是有效使用 iCloud 数据库 space。
您提出的设计将使您多次存储相同的信息。根据您的用例,这可能比理想情况多很多倍:
例如
Person A
<-配对-> Person B
Person A
<-配对-> Person C
Person A
<-配对-> Person D
如果这个系列继续下去,那么您将在数据库中多次存储 Person A
,这可以被认为是对 space 的巨大浪费。另一方面,您打算如何使用数据可能是完全合理的。
我建议对您的用例进行建模并根据 usage limits that Apple provides for iCloud.
对其进行衡量
我已经使用 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 中,我意识到如果我想获得 "Pair" 及其所有数据,我将 "Person" 和 "Address" CKReference
然后我将不得不获取 "Person" 和 "Address",这是两个额外的网络调用和大量逻辑来异步处理它们的结果。所以我在考虑 "denormalizing" 这个数据并将其全部放入 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 的额外网络提取调用是否合法?
Is it legitimate to design my CloudKit schema this way to avoid extra network fetch calls for CKReferences?
我会说答案是肯定的,这是一个合法的设计。
请注意,您所做的权衡是优先考虑有效的网络调用而不是有效使用 iCloud 数据库 space。
您提出的设计将使您多次存储相同的信息。根据您的用例,这可能比理想情况多很多倍:
例如
Person A
<-配对->Person B
Person A
<-配对->Person C
Person A
<-配对->Person D
如果这个系列继续下去,那么您将在数据库中多次存储 Person A
,这可以被认为是对 space 的巨大浪费。另一方面,您打算如何使用数据可能是完全合理的。
我建议对您的用例进行建模并根据 usage limits that Apple provides for iCloud.
对其进行衡量