2016-11-09 11 views
1

Core Dataを使用してローカルデータモデルを作成しました。これは、オブジェクト指向であるので、私は私のコアデータモデルではこのようなものを持っている: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 
} 

Person "と" Address "CKReference私は" Person "と" Address "という2つの余分なネットワーク呼び出しとその結果を非同期的に処理する多くのロジックをフェッチしなければなりません。そこで、私はこのデータを「非正規化」し、CloudKitスキーマの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 
} 

は、余分なネットワークがCKReferencesのコールをフェッチ避けるために、このように私CloudKitスキーマを設計することは正当ですか?

答えて

1

私CloudKitスキーマCKReferencesのコールをフェッチ余分なネットワークを避けるために、この方法を設計することは正当ですか?

私は答えがはい、正当なデザインだと言います。

iCloudデータベーススペースを効率的に使用するよりも、効率的なネットワークコールに優先順位を付けることになります。

提案されたデザインは、同じ情報を複数回保存することになります。ユースケースに応じて、理想より多くの時間がかかる可能性があります。

  • 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に対して測定することをお勧めします。