2012-06-24 2 views
1

Je suis nouveau à NoSQL et BigTable, et j'essaie d'apprendre comment je peux (et si je devrais) utiliser des super colonnes pour créer un schéma convivial BigTable . En ce qui concerne la modélisation des données NoSQL, il semblerait qu'au lieu d'utiliser des schémas RDBMS JOIN-centric, je devrais agréger mes données dans des tables plus grandes pour les normaliser si possible. Sur cette base, voici un schéma simple que j'envisagé pour un « utilisateur », que je suis en train de créer pour Cassandra:Listes dans NoSQL/BigTable Data Modeling & Super Columns (avec Cassandra)

User: { 
    KEY: UserId { 
     name: { 
      first, 
      last 
     }, 
     age, 
     gender 
    } 
}; 

La famille de la colonne ci-dessus (utilisateur), dont la clé est un « UserID », est composé de 3 colonnes (nom, âge, sexe.) Sa colonne 'nom' serait une super colonne composée des colonnes 'first' et 'last'.

Ce que je demande est:

  1. Que signifie le CQL 3.0 ressembler à pour créer cette famille colonne « utilisateur » avec des super colonne « nom » en son sein? (Mise à jour: Cela ne semble pas possible.)
  2. Devrais-je utiliser des super colonnes (comme ceci)? Dois-je utiliser autre chose?
  3. Quelle est une autre façon de représenter ce schéma?
  4. Comment représenter une liste de valeurs dans une famille de tables/colonnes?

Voici quelques liens utiles sur ce que je trouve, mais que je ne comprends pas tout à fait assez clairement pour répondre à ma question:

Merci!

Mise à jour:

Après beaucoup de recherches, j'apprends quelques choses:

  • Vous ne pouvez pas créer des super colonnes à l'aide CQL; il pourrait y avoir d'autres mécanismes pour le faire, mais CQL ne semble pas être l'un d'entre eux.
  • La syntaxe de SQL 3.0 semble dériver d'une approche centrée sur la 'COLUMN FAMILY' vers une syntaxe basée sur la table 'SQL'.

J'ai modifié mes questions en conséquence.

Répondre

0

Devrais-je utiliser des super colonnes (comme ceci)? Devrais-je utiliser quelque chose d'autre?

Vous pouvez utiliser ce modèle de données que vous avez suggéré. Mais généralement, il n'est pas recommandé pour ces raisons comme mentionné dans le link.

Je noterai également que l'utilisation de super colonnes est généralement déconseillée car présentent plusieurs inconvénients. Toutes les sous-colonnes d'une super-colonne doivent être désérialisées lors de la lecture d'une sous-colonne et vous ne pouvez pas définir des index secondaires sur les super-colonnes. Ils prennent également en charge uniquement un niveau d'imbrication.

Considérez donc ces raisons pour votre situation.

Quelle est une autre façon de représenter ce schéma?

Vous pouvez essayer d'utiliser des colonnes composites. Lire here pour plus d'informations. Ou vous pouvez probablement utiliser une famille de colonnes standard, je pense que la norme CF sera adaptée à votre situation. Par exemple, après suggestion:

User : { 
    key: userId { 
    columnName:firstname 
    ColumnName:lastname 
    ColumnName:age 
    ColumnName:gender 
    ColumnName:zip 
    ColumnName:street 
    } 
    .. 
}; 

Comment puis-je représenter une liste de valeurs dans une famille de table/colonne?

Il est possible de stocker la liste dans un BytesType dans le Ou vous pouvez probablement diviser la liste en élément individuel et stocker en tant que CompositeType.