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

¿Fue útil?

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top