cómo diseñar el esquema hbase?
Pregunta
supongamos que tengo esta tabla RDBM ( entidad-atributo-value_model ):
col1: entityID
col2: attributeName
col3: value
y quiero utilizar HBase debido a cuestiones de escala.
Yo sé que la única manera de acceder a la tabla hbase está utilizando una clave principal (cursor). se puede obtener un cursor para una tecla específica, y repetir las filas de uno en uno.
El problema es que, en mi caso, quiero ser capaz de repetir en las 3 columnas. por ejemplo:
- para un dado una entityId quiero conseguir todos sus attriutes y valores
- para una attributeName valor de dar y quiero todos los entitiIDS ...
así que una idea que tuve es construir una tabla hbase que contendrá los datos (datos de la tabla, con entityId como índice primario), y 2 "índice" tablas uno con attributeName como una clave principal, y el otro con valor
cada tabla de índices llevará a cabo una lista de punteros (entityIDs) para la tabla de datos.
¿Es un enfoque razonable? o se es un 'abuso' de los conceptos hbase?
En la el blog = "http: // Blog ? .rapleaf.com / dev / autor = 7" rel = "nofollow noreferrer"> autor decir:
HBase permite obtener operaciones de primaria llave y exploraciones (piensa: cursor) sobre la fila rangos. (Si usted tiene ambos escala y necesidad de índices secundarios, no se preocupe - Lucene al rescate! Pero eso es otro post.)
¿Sabe cómo Lucene puede ayudar?
- Yonatan
Solución
Los índices secundarios podrían de hecho ser útil para muchas aplicaciones potenciales de HBase, y creo que los desarrolladores están, de hecho, mirándolo. Pedido http://www.mail-archive.com /hbase-dev@hadoop.apache.org/msg04801.html.
Por el momento, sin embargo, si su aplicación de almacenamiento de datos puede ser modelado como un esquema de estrella (ver http : //en.wikipedia.org/wiki/Star_schema ) que le gustaría obtener de la solución que propone Hypertable para las necesidades de tipo índice secundario http://markmail.org/message/rphm4q6cbar2ycgp
Otros consejos
Es recomendable tener dos tablas planas diferentes: uno para buscar atributos valores dados + entityId, y uno para buscar el entityId dado atributos + valores
.Tabla 1 se vería así:
entityID1 {
attribute1: value1;
attribute2: value2;
...
}
y en la Tabla 2:
attribute1_value1 {
entityID1;
}
attribute2_value2 {
entityID1;
}