2011-11-12 2 views
3

Considérez ce qui suit, je veux stocker des données sur les briques de pierre à Cassandra. D'abord, la brique a un nom/identifiant unique appelé brick123. Cette brique a des "dimensions" de largeur: 6, hauteur: 3, longueur: 4. Son "poids: 2pds". Il a une couleur de base "couleur" sauvage: rouge, teinte: grès, rayure: bleu. Il est "produit" dans les pays suivants, 1: Russie, 2: Afrique, 3: Japon. Nous pouvons le commander auprès des «fournisseurs» suivants 1: Lowes, 2: briques-r-us, 3: pierre-approvisionnement.Cassandra Data-Model - 1 SCF ou plusieurs CF

Maintenant, si nous avons X nombre de briques en pierre, devrions-nous utiliser une famille Super-Colonne pour abriter nos données de briques? Serions-nous en mesure de demander à Cassandra pour Stone Bricks from Africa ou quelles briques de pierre sont disponibles grâce à l'approvisionnement en pierre?

Merci!

Répondre

2

Le conseil normal semble être d'éviter les SCF en faveur de plusieurs CFs. Pour les propriétés simples d'une brique (largeur, couleur ...), vous pouvez utiliser une ligne simple par brique avec une colonne par propriété (vous pouvez également activer des index secondaires automatiques si vous voulez rechercher des briques avec des détails particuliers). propriétés):

CF "bricks": 

brick123 -> w h l weight color hue  striping 
      6 3 4 2pds red sandstone blue 

pour les propriétés à valeurs multiples (pays, producteurs), vous pourriez avoir des familles de colonnes séparées:

CF "countries": 

brick123 -> Russia Africa Japan 
      <empty> <empty> <empty> 

et/ou si vous voulez rechercher des briques d'un pays donné, vous créer un index secondaire comme un autre CF:

CF "country2bricks" 

Russia -> brick123 brick124 ... 
      <empty> <empty> 

Africa -> brick123 brick127 ... 
      <empty> <empty> 

Japan -> brick123 
      <empty> 

(et même pour les fournisseurs)

Le point clé est que Cassandra vous structurez les familles des colonnes pour répondre aux requêtes que vous souhaitez effectuer, dénormaliser au besoin. "Empty" indique que nous utilisons uniquement le nom de la colonne pour stocker des informations, avec une valeur de colonne vide.

+0

Merci ADN! Plus je lis et étudie sur ce sujet, il semble que vous avez dit, soit plusieurs cf ou l'utilisation des colonnes CompositeType. CompositeType semble prometteur à l'exception du manque de support dans beaucoup d'API comme PHP. – Blake

+0

PHP supporte les composites maintenant. il suffit de faire la clé comme "quelque chose: something_else". – Nick

1

Les super colonnes ne sont pas indexées - cela signifie que l'accès en lecture sur super colonne chargerait tout son contenu dans la RAM. C'est aussi une autre raison d'éviter la fonction SCF, surtout si elle contient une grande quantité de données.

http://wiki.apache.org/cassandra/CassandraLimitations

Questions connexes