2012-03-05 17 views
9

La documentación de Hbase dice que evite crear más de 2-3 familias de columnas porque Hbase no maneja muy bien a más de 2-3 familias de columnas. La razón de esto es la compactación y el enjuague y, por lo tanto, el IO. Sin embargo, si todas mis columnas están siempre llenas (para cada fila), entonces creo que este razonamiento no es tan importante, por lo que, teniendo en cuenta que mi acceso a las columnas es completamente aleatorio (quiero acceder a cualquier combinación de columnas), ¿puedo tener una? familia de columnas: una configuración de columna (que intenta de manera efectiva hacerla puramente en columna).Familia de columnas Hbase

Hay muchos blogs/wikis explicando esto, pero todos parecen contradecir y agregar más confusión. Simplemente no parece ser capaz de digerir el hecho de que Hbase prefiere una familia de columnas, entonces ¿de qué sirve llamar es una tienda de columnas?

Respuesta

21

Actualmente (aunque se espera que esto cambie), todas las familias de columnas de una región se purgan juntas. Esta es la razón principal por la que las personas dicen "a HBase no le va bien con más de 2 o 3 familias de columna". Considere dos CF's, cada uno con una columna. Columna A: A almacena textos completos de la página web. Columna B: B almacena el número de palabras en la página. Así que cada vez que arrojemos A: A (lo que ocurrirá más a menudo porque los datos de A: A son mucho más grandes), también tenemos que pasar por un enrutamiento de mapeo de E/S de archivo completo para la columna B: B, aunque no haya Necesito- con B: B solo con números, podría pasar meses sin enjuagarlo.

Si almacena A y B en la misma familia de columnas (A: A y A: B), probablemente verá un rendimiento de E/S de descarga mucho mejor, y como la mayoría de las lecturas de HBase son puramente del memstore, lo hará probablemente encuentre que las velocidades de lectura son equivalentes.

Además, y quizás lo más importante, si la cardinalidad de las columnas es muy diferente, entonces sus servidores de regiones necesitarán mantener inútiles archivos en su mayoría vacíos para sus familias de columnas menos densas. Esto nunca cambiará

Todo esto está disponible en el HBase Book.

Por lo tanto, como en todas las situaciones de rendimiento, mida antes de decidir cuál es la ruta "correcta".

+0

¡Gracias por la explicación! – PrakashT

+0

Entonces, en mi caso, por lo que yo entiendo, tengo dos opciones: a) Tengo todas las columnas en una familia de columnas. Esto tendrá un impacto en el rendimiento, ya que la mayoría de las veces necesito acceder solo a 1-2 columnas, pero con este diseño leeré toda la fila. Aunque estas lecturas se distribuirán en muchos servidores regionales. 2) Divido mis columnas en familias de tal manera que sean de tamaños similares. – PrakashT

+2

Probablemente deberías dejar de preocuparte por leer toda la fila. HBase es extremadamente bueno sobre solo leer lo que realmente necesita. Si la celda que necesita leer está en la memoria, HBase no hará ningún IO de disco adicional. –

Cuestiones relacionadas