13 votes

Stockage des UUID dans les données de base

Quelle est la meilleure méthode pour stocker les UUID (pour l'identification globale d'objets multi-systèmes) dans les données de base ? En tenant compte de la taille du stockage et des capacités d'indexation.

L'idéal serait de les stocker sous forme de données binaires (en 128 bits), mais cela pose-t-il des problèmes immédiats ? Il serait plus efficace en termes de taille de le stocker de cette façon plutôt que sous forme de NSString, mais je veux juste vérifier qu'il n'y a pas de problèmes de performance à le stocker sous forme de données binaires. Sera-t-il toujours correctement indexé en tant que données binaires ? Y a-t-il des inconvénients à stocker ce qui est en fait des données binaires de largeur fixe dans un champ de largeur variable ?

Je ne suis pas très familier avec SQLite et ses mécanismes de stockage/indexation et je voulais donc obtenir quelques conseils.

24voto

Jonny Points 1025

À partir d'iOS 11, vous pouvez définir l'attribut UUID directement dans l'éditeur Core Data. L'UUID sera automatiquement stocké sous forme binaire.

enter image description here

Vous pouvez ensuite récupérer vos objets Core Data à l'aide de la fonction UUID (dans Obj-C, NSUUID ).

static func fetch(with identifier: UUID) -> AudioRecord? {
    var record: AudioRecord?
    moc.performAndWait {
        let fetchRequest = AudioRecord.request
        fetchRequest.predicate = NSPredicate(format: "identifier == %@", identifier as CVarArg)
        fetchRequest.fetchLimit = 1
        record = (try? fetchRequest.execute())?.first
    }
    return record
}

6voto

Caleb Points 72897

Combien d'entre eux comptez-vous conserver ? Les stocker sous forme de données binaires permet d'économiser environ 50 % - environ 20 octets sous forme de données binaires contre environ 40 octets sous forme de chaîne de caractères. Il s'agit donc d'une économie de 20K par millier d'UUID, ce qui n'est pas assez pour que je m'en préoccupe dans un cas comme dans l'autre. Cependant, si vous voulez vraiment les sauvegarder en tant que données binaires, vous pouvez le faire en les stockant en tant qu'objets NSData.

0voto

Coder1224 Points 564

Je stocke mon UUID en tant que "Transformable" et cela fonctionne bien.

  1. Ajoutez ceci à votre NSManagedObject sous-classe : @NSManaged var uuid: NSUUID!

  2. dans votre modèle de données central (fichier .xcdatamodel), créez un attribut nommé uuid avec type Transformable

L'interrogation fonctionne bien aussi, j'écris mes prédicats pour faire des recherches sur eux comme ceci :

request.predicate = NSPredicate(format: "uuid == %@", withUuid)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X