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。