2016-11-09 13 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 "를 가져와야합니다. 그래서이 데이터를 "비정규 화 (denormalizing)"하여 CKReference없이 CloudKit 스키마의 "Pair"CKRecord에 넣었습니다.

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 뿐인데>Person B
  • Person A < -pairs 뿐인데>Person C
  • Person A < -pairs 뿐인데>

    이 시리즈는 훨씬 더 계속하면 Person D

, 그때 당신은 데이터베이스에 많은 시간을 Person A 저장하고 그것은 공간의 큰 낭비로 간주 될 수 있습니다. 반면에 데이터를 어떻게 사용할 것인지에 대해서는 완전히 합리적 일 수 있습니다.

사용 사례를 모델링하고 usage limits that Apple provides for iCloud에 대해 측정하는 것이 좋습니다.