Domanda

supporre che ho questo tavolo RDBM ( Entità-attributo-value_model ):

col1: entityID
col2: attributeName
col3: value

e voglio usare HBase a causa di problemi di scala.

So che l'unico modo per accedere alla tabella HBase sta usando una chiave primaria (cursore). è possibile ottenere un cursore per una chiave specifica, e iterare le file uno per uno.

Il problema è, che nel mio caso, io voglio essere in grado di scorrere su tutte le 3 colonne. per esempio:

  • per un dato un entityID voglio ottenere tutte le sue attriutes e valori
  • per un attributeName dare e il valore che voglio a tutti i entitiIDS ...

così un'idea che avevo è quello di costruire una tabella HBase che conterrà i dati (dati della tabella, con entityID come indice primario), e 2 "indice" tavoli uno con attributeName come una chiave primaria, e l'altro con un valore

ogni tabella indice terrà una lista di puntatori (entityIDs) per la tabella di dati.

Si tratta di un approccio ragionevole? o è è un 'abuso' di concetti HBase?

In questo blog autore dire:

  

HBase permette ottenere operazioni di primaria   chiave e scansioni (pensare: cursore) oltre fila   gamme. (Se si dispone di scala e di   bisogno di indici secondari, non ti preoccupare   - Lucene per il salvataggio! Ma questo è un altro post.)

Sapete come Lucene può aiutare?

- Yonatan

È stato utile?

Soluzione

Gli indici secondari sarebbe davvero essere utile per molte applicazioni potenziali di HBase, e credo che gli sviluppatori sono in realtà guardando. Acquista http://www.mail-archive.com /hbase-dev@hadoop.apache.org/msg04801.html.

Nel frattempo, però, se l'archiviazione dei dati applicazione può essere modellato come uno schema a stella (vedi http : //en.wikipedia.org/wiki/Star_schema ) come si potrebbe alla cassa la soluzione che propone per Hypertable secondarie esigenze indice di tipo http://markmail.org/message/rphm4q6cbar2ycgp

Altri suggerimenti

Mi consiglia di avere due diverse tabelle piatti: uno per la ricerca di attributi + valori dati entityID, e uno per la ricerca del entityID data attributi + valori

.

La tabella 1 sarebbe simile a questa:

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

e Tabella 2:

attribute1_value1 {
  entityID1;
}
attribute2_value2 {
  entityID1;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top