2016-01-28 3 views
0

Les ensembles C * garantissent que tous les éléments d'un ensemble sont uniques. Comment ça marche pour les types définis par l'utilisateur (UDT)?CQL - Unicité des éléments dans un ensemble de types définis par l'utilisateur

Avec des types simples, le nom de la cellule est juste le nom de la colonne CQL concaténée avec la valeur de la colonne. Par exemple, si nous avons

CREATE TABLE friendsets (
     ... user text PRIMARY KEY, 
     ... friends set <text> 
     ...); 

Nous amis sont stockés comme

(column=friends:'doug', value=) 
(column=friends:'jon', value=) 

si amis est défini comme un ensemble de UTD (amis mis < ami surgelés>)? Le nom des cellules des 'amis' sera-t-il concaténé avec la valeur sérialisée de Friend?

Répondre

0

Cassandra sérialisera la valeur des types gelés dans un objet BLOB lorsque vous l'enregistrez dans une table. La représentation sur disque doit être identique à tout autre type pour votre ensemble, mais Cassandra sera capable de désérialiser les octets vers une instance UDT, une fois lue par une requête.

+0

Alors, comment est uniqness appliquée dans un ensemble de UDT? Si un ami a un identifiant et un nom, cela signifie que je serais capable de stocker plusieurs amis avec le même identifiant ... UTD est essentiellement traité comme un tuple - 2 tuples sont égaux seulement si tous leurs champs sont identiques – EugeneMi

+0

Comment pourrais-je mettre à jour le nom d'un ami? Trouvez l'ami par identifiant, supprimez-le, puis insérez un nouvel ami. – EugeneMi

+0

Correct, vous devez supprimer et rajouter l'ami mis à jour à votre ensemble. Pour ce que ça vaut, vous devez également garder à l'esprit les mises à jour simultanées. Vous devez toujours utiliser des instructions CQL individuelles pour supprimer ou ajouter des éléments à un ensemble, au lieu de remplacer l'ensemble complet pour éviter d'écraser les modifications d'une mise à jour simultanée. –