2009-03-25 3 views
10

La documentación de Hbase deja en claro que debe agrupar columnas similares en familias de columnas, porque el almacenamiento físico se realiza por familia de columnas.Hbaseop Hbase: familias de columnas distribuidoras en tablas o no

Pero, ¿qué significa colocar dos familias de columnas en la misma tabla, en lugar de tener tablas separadas por grupo de columnas? ¿Hay casos específicos cuando las tablas de "particionamiento" de esta manera tienen más sentido, y los casos cuando una tabla "amplia" funciona mejor?

Las tablas separadas deben dar como resultado "regiones de fila" separadas, lo que podría ser beneficioso cuando algunas familias de columnas (como un todo) son muy escasas. Por el contrario, ¿cuándo sería ventajoso tener familias de columnas agrupadas?

Respuesta

8

Tiene la idea de familias de columnas: básicamente, es solo una sugerencia para HBase para almacenar y replicar estos elementos para un acceso más rápido.

Si coloca dos familias de columnas en la misma tabla y siempre tiene diferentes claves para acceder a ellas, entonces es realmente lo mismo que tenerlas en dos tablas separadas. Solo gana al tener dos familias de columnas en la misma tabla a las que se accede mediante las mismas teclas.

Por ejemplo: si tengo columnas para el número total de vistas de página para un sitio web determinado, el número de vistas únicas para el mismo sitio, el navegador que usa el usuario para ver el sitio y su conexión a Internet, puedo decide que quiero que los dos primeros sean una familia de columnas y los dos últimos sean otra familia de columnas. Aquí se accede a los cuatro con la misma clave, es decir, el sitio web en cuestión, así que estoy ganando al tenerlos en la misma tabla.

Si están en diferentes tablas, terminaría teniendo que hacer una operación de combinación en las dos tablas. Aunque no sé muy bien las cifras, no puedo decirles qué tan lenta es la operación de unión (ya que no recuerdo que HBase tenga una unión porque no es relacional) y cuál es el punto de inflexión en el que se divide incluirlos en tablas separadas compensa tenerlos en la misma tabla (o viceversa).

Por supuesto, todo esto depende de los datos que intenta almacenar, por lo que si nunca necesita unirse a través de las tablas, querrá mantenerlos en tablas separadas ya que podría argumentar que no son eso relacionados entre sí en primer lugar.

+0

Dice "Unirse es caro". Eso parece implicar que una "unión" entre grupos de columnas dentro de la misma tabla es más barata que una combinación de grupos de columnas en todas las tablas. Es ese el caso? Los documentos de HBase no dejan eso en claro, creo. – Thilo

+1

Creo que es mucho más barato hacer un 'join' entre columnas en la misma tabla, ya que es solo una operación 'get' con las dos columnas nombradas y es una primitiva en el lenguaje de consulta. 'Unirse', sin embargo, no es primitivo y tendría que implementarlo por su cuenta (lo que requiere más operaciones). –

8

Las familias de columnas son un compromiso entre el acceso orientado a filas y el orientado a columnas. Para extender el ejemplo de la página web de Chris, un acceso a una fila podría obtener todos los datos (columnas) para un único sitio web. Un ejemplo de una operación orientada a columnas sería sumar el número de vistas de página en todos los sitios.

La última operación no requiere los detalles del navegador y de la conexión, que son mucho más grandes que los valores numéricos para ver los recuentos y afectarían significativamente el rendimiento de la consulta. Por lo tanto, HBase proporciona familias de columnas como una optimización que admite operaciones de columnas.

En cuanto a si las columnas deben estar o no en la misma tabla ... Solo seguiría las pautas de modelado de datos normales y pondría todas las columnas en la misma tabla si son atributos de la misma entidad. Las familias de columnas tratan sobre el rendimiento, no sobre el esquema.

+1

"Las familias de columnas tienen que ver con el rendimiento, no con el esquema". Esto no ha sido claro para mí hasta que lo haya dicho. Gracias. –

Cuestiones relacionadas