2008-12-17 25 views
11

suponer que tengo esta tabla RDBM (Entity-attribute-value_model):cómo diseñar el esquema Hbase?

col1: entityID 
col2: attributeName 
col3: value 

y quiero utilizar HBase debido a problemas de escala.

Sé que la única forma de acceder a la tabla Hbase es utilizando 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 dado una entityId quiero conseguir todos sus attriutes y valores
  • para un attributeName valor de dar y quiero todos los entitiIDS ...

por lo 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 pestaña de índice le mantendrá una lista de punteros (entityID) para la tabla DATA.

¿Es un enfoque razonable? o es un 'abuso' de los conceptos de Hbase?

En este blog la author dicen:

HBase permite obtener operaciones por clave principal 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!.)

¿Conoce cómo Lucene puede ayudar?

- Yonatan

Respuesta

5

índices secundarios de hecho sería útil para muchas aplicaciones potenciales de HBase, y creo que los desarrolladores son, de hecho, mirándolo. Pago http://www.mail-archive.com/[email protected]/msg04801.html.

Por el momento, sin embargo, si su almacenamiento de datos de la aplicación se puede modelar como un esquema de estrella (ver http://en.wikipedia.org/wiki/Star_schema) que le gustaría obtener de la solución que Hypertable propone para la secundaria de tipo índice de necesidades http://markmail.org/message/rphm4q6cbar2ycgp

0

recomiendo tener dos tablas planas diferentes: una para buscar atributos + valores dados entityID, y otra para buscar los ID de la entidad dados atributos + valores.

Tabla 1 se vería así:

entityID1 { 
    attribute1: value1; 
    attribute2: value2; 
    ... 
} 

y en la Tabla 2:

attribute1_value1 { 
    entityID1; 
} 
attribute2_value2 { 
    entityID1; 
}