rdbms - tutorial - instalacion hbase
cómo diseñar el esquema Hbase? (2)
supongamos que tengo esta tabla RDBM ( Entity-attribute-value_model ):
col1: entityID
col2: attributeName
col3: value
y quiero usar HBase debido a problemas de escala.
Sé que la única forma de acceder a la tabla Hbase es usando una clave principal (cursor). puede obtener un cursor para una clave específica e iterar las filas una a una.
El problema es que, en mi caso, quiero poder iterar en las 3 columnas. por ejemplo :
- para un ID de entidad determinado, quiero obtener todos sus atributos y valores
- para dar un attributeName y un valor que quiero para todos los entitiIDS ...
así que una idea que tuve es construir una tabla Hbase que contenga los datos (tabla DATA, con entityID como índice principal), y 2 tablas "indexadas" una con attributeName como clave principal y la otra con valor
cada tabla de índice contendrá una lista de punteros (entityID) para la tabla DATA.
¿Es un enfoque razonable? o es un ''abuso'' de los conceptos de Hbase?
HBase permite obtener operaciones por clave primaria y escaneos (pensar: cursor) sobre rangos de fila. (Si tiene escala y necesita índices secundarios, no se preocupe, ¡Lucene al rescate! Pero esa es otra publicación).
¿Sabes cómo puede ayudar Lucene?
- Yonatan
Los índices secundarios serían de hecho útiles para muchas aplicaciones potenciales de HBase, y creo que los desarrolladores de hecho lo están analizando. Checkout http://www.mail-archive.com/[email protected]/msg04801.html .
Mientras tanto, si el almacenamiento de datos de su aplicación se puede modelar como un esquema en estrella (consulte http://en.wikipedia.org/wiki/Star_schema ), es posible que desee consultar la solución que Hypertable propone para necesidades secundarias de tipo índice. http://markmail.org/message/rphm4q6cbar2ycgp
Recomiendo tener dos tablas planas diferentes: una para buscar atributos + valores dada ID de entidad, y otra para buscar la entidad ID con los atributos + valores.
La Tabla 1 se vería así:
entityID1 {
attribute1: value1;
attribute2: value2;
...
}
y Tabla 2:
attribute1_value1 {
entityID1;
}
attribute2_value2 {
entityID1;
}