2011-09-16 5 views
4

J'ai lu quelque part indiquant que pour une rangée ayant des milliers de colonnes dans une famille de colonnes standard, mieux concevoir pour les diviser en super colonnes, et ce faisant, la lecture serait très efficace comme cassandra Il suffit de charger et de renvoyer les colonnes sous un super nom de colonne donné, au lieu de charger et de renvoyer éventuellement les milliers de colonnes. Quelqu'un peut-il s'il vous plaît confirmer?famille de colonnes standard vs super colonne famille

Répondre

6

Ce n'est pas un bon conseil. À ce stade, il existe un très petit nombre de cas d'utilisation pour lesquels les super colonnes sont la meilleure solution. Les nouveaux CompositeTypes constituent une meilleure solution pour la plupart des super colonnes utilisées historiquement. Cela dit, il semble que vous n'aurez pas non plus besoin de CompositeTypes ici non plus. C'est vrai que si vous lisez une très grande rangée, vous ne devriez pas retirer toute la rangée à la fois. Au lieu de cela, vous devriez aller chercher des portions de la rangée dans des coupes contiguës.

Fondamentalement, vous allez effectuer une série de get_slice() s. Pour le premier, définissez le nombre de colonnes à, disons, 1000, et la colonne commence à "". Ensuite, prenez le nom de la dernière colonne de cet ensemble de résultats (appelez-le X) et effectuez un autre appel get_slice() avec un nombre de colonnes de 1000, mais cette fois, définissez la colonne sur X. Ignorez la première colonne que vous récupérez (sera X), puis répétez l'ensemble du processus get_slice() jusqu'à ce que la requête renvoie moins de 1000 colonnes, ce qui indique que vous avez atteint la fin de la ligne.

Vous souhaiterez peut-être aller chercher plus de ou moins de 1000 à la fois, en fonction de la taille de votre colonne.

+0

Notez qu'une requête qui renvoie moins de 1 000 colonnes peut ne pas signaler la fin. De mon expérience, j'ai eu des moments où j'aurais moins de colonnes retournées. Vous devriez lire jusqu'à ce qu'il retourne zéro. Probablement un algorithme plus simple de toute façon. Aussi, je suis content que vous ayez spécifié que le nombre de lignes à lire dépend de la taille de vos colonnes. J'utilise souvent juste 100 parce que certaines de mes colonnes ont beaucoup de données. –

0

S'il y a beaucoup de colonnes ou si les données doivent être indexées, il est préférable de créer une famille de colonnes normale car: 1) les sous-colonnes super CF ne sont pas indexées et 2) toute demande de sous-colonne désérialise tous les sous-colonnes dans la super colonne. Mais, cela peut être une limitation dans la base de code actuelle, voir http://wiki.apache.org/cassandra/CassandraLimitations

+0

Quelle est la différence entre le CQL 'CREATE TABLE' avec plusieurs colonnes et les super colonnes? Parce que ça me semble équivalent ... –

Questions connexes