2012-03-05 7 views
9

La documentation Hbase indique que la création de plus de 2 à 3 familles de colonnes est impossible, car Hbase ne gère pas très bien plus de 2 ou 3 familles de colonnes. La raison de ceci est le compactage et le rinçage et donc l'IO. Cependant, si toutes mes colonnes sont toujours peuplées (pour chaque ligne) alors je pense que ce raisonnement n'est pas si important, donc, considérant que mon accès aux colonnes est complètement aléatoire (je veux accéder à n'importe quelle combinaison de colonnes) - puis-je en avoir un? Colonne family -une configuration de colonne (essayant effectivement de le rendre pur en colonne).Famille de la colonne Hbase

Il existe de nombreux blogs/wikis expliquant cela, mais ils semblent tous contredire et ajouter plus de confusion. Je ne semble pas être capable de digérer le fait que Hbase préfère une famille de colonnes, alors à quoi sert d'appeler un magasin de colonnes?

Répondre

21

Actuellement (bien que cela devrait changer), toutes les familles de colonnes d'une région sont vidées ensemble. C'est la principale raison pour laquelle les gens disent que "HBase ne fonctionne pas bien avec plus de 2 ou 3 familles de colonnes". Considérez deux CF, chacune avec une colonne. Colonne A: A stocke tous les textes de pages Web. Colonne B: B stocke le nombre de mots dans la page. Donc, chaque fois que nous vidons A: A (ce qui arrivera plus souvent parce que les données de A: A sont beaucoup plus grandes), nous devons également passer par un routage de jonglerie d'E/S séparé pour la colonne B: B, même s'il n'y a pas de besoin de - avec B: B ne contenant que des chiffres, je pourrais aller pendant des mois sans le bouleverser. Si vous stockez A et B dans la même famille de colonnes (A: A et A: B), vous verrez probablement des performances d'E/S meilleures, et parce que la plupart des lectures HBase proviennent purement du magasin, vous devrez trouveront probablement que les vitesses de lecture sont équivalentes. De plus, et peut-être plus important encore, si la cardinalité des colonnes est très différente, alors vos serveurs régionaux devront conserver des fichiers inutiles, généralement vides, pour vos familles de colonnes moins denses. Cela ne changera jamais. Tous ces éléments sont disponibles dans le HBase Book. Donc, comme dans toutes ces situations de performance, mesure avant de décider quel est le chemin "correct".

+0

Merci pour l'explication! – PrakashT

+0

Donc dans mon cas, autant que je comprends, j'ai deux options: a) J'ai toutes les colonnes dans une famille de colonnes. Cela aura un impact sur la performance car la plupart du temps je n'ai besoin d'accéder qu'à 1-2 colonnes mais avec cette conception je lirai la ligne complète. Bien que ces lectures seront distribuées sur de nombreux serveurs de la région. 2) Je divise mes colonnes en familles de telle sorte qu'elles soient de taille similaire. – PrakashT

+2

Vous devriez probablement arrêter de vous soucier de lire toute la ligne. HBase est extrêmement bon de ne lire que ce dont il a vraiment besoin. Si la cellule que vous avez besoin de lire est en mémoire, HBase n'effectuera aucune opération d'E/S sur le disque. –

Questions connexes