2016-11-09 1 views
1

J'ai écrit mon modèle de données local en utilisant des données de base. Il est orienté objet, j'ai donc quelque chose comme ça dans mon modèle Core Data:Conception de schéma 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 
} 

Maintenant en CloudKit, je me rends compte si je veux obtenir une « paire » et toutes ses données, et je fais " Personne "et" Adresse "CKReference alors je vais devoir chercher" Personne "et" Adresse "qui est deux appels réseau supplémentaires et beaucoup de logique pour gérer leurs résultats de manière asynchrone. Je pensais donc à "dénormaliser" ces données et à tout mettre dans une "paire" CKRecord dans le schéma CloudKit, sans aucune CKReference s. Donc, plus le long des lignes de ce:

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 
} 

est-il légitime de concevoir mon schéma CloudKit cette façon d'éviter le réseau supplémentaire Fetch appels à CKReferences?

Répondre

1

Est-il légitime de concevoir mon schéma CloudKit cette façon d'éviter le réseau supplémentaire pour intercepter les appels CKReferences?

Je dirais que la réponse est oui, il est une conception légitime.

Notez que le compromis que vous faites priorise les appels réseau efficaces sur l'utilisation efficace de l'espace de base de données iCloud.

La conception que vous proposerez vous permettra de stocker la même information plus d'une fois. En fonction de vos cas d'utilisation, cela pourrait être beaucoup plus de fois que ce qui serait idéal:

par exemple.

  • Person A < -pairs avec->Person B
  • Person A < -pairs avec->Person C
  • Person A < -pairs avec->Person D

Si cette série se poursuit beaucoup plus loin, alors vous stockez plusieurs fois dans la base de données et cela peut être considéré comme une grande perte d'espace. D'autre part, il pourrait être tout à fait raisonnable pour la façon dont vous avez l'intention d'utiliser les données.

Je vous suggère de modéliser vos cas d'utilisation et de les mesurer par rapport au usage limits that Apple provides for iCloud.