2016-11-09 15 views
1

Я написал свою локальную модель данных с использованием Core Data. Это объектно-ориентированный, так что у меня есть что-то подобное в моей модели Core Data:Схема схемы 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, я понимая, если я хочу, чтобы получить «пару» и все его данные, и я делаю " Person "и" Address "CKReference, тогда мне нужно будет получить« Лицо »и« Адрес », что является двумя дополнительными сетевыми вызовами и множеством логических функций для асинхронного обработки их результатов. Поэтому я подумывал об «денормализации» этих данных и помещал их в «пару» CKRecord в схему CloudKit, без каких-либо 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

Является ли правомерным дизайн моей CloudKit схемы таким образом, чтобы избежать дополнительной сети выборки требует CKReferences?

Я бы сказал, что ответ да, это законный дизайн.

Обратите внимание, что компромисс, который вы делаете, определяет приоритетность эффективных сетевых вызовов за эффективное использование пространства базы данных iCloud.

Ваш предлагаемый проект заставит вас хранить одну и ту же информацию более одного раза. В зависимости от ваших вариантов использования это может быть намного больше, чем было бы идеально:

например.

  • Person A < -пар с->Person B
  • Person A < -пар с->Person C
  • Person A < -пар с->Person D

Если эта серия идет гораздо дальше, то вы храните Person A много раз в базе данных, и это можно считать большой тратой пространства. С другой стороны, может быть вполне разумно, как вы собираетесь использовать данные.

Я бы предложил моделировать ваши варианты использования и измерить их против usage limits that Apple provides for iCloud.