2013-03-14 13 views
5

Provengo da uno sfondo RDBMS e ho iniziato a leggere HBase di recente. Capisco che non vi sono indici secondari e non dobbiamo cercare di fare qualcosa di simile:HBase: dimensione chiave Riga

SELECT * FROM tbl_photo WHERE album_id = 1969 

mi chiedevo se tutte le informazioni possono essere utilizzati per creare una riga-chiave stessa.

Ad es. C'è un utente con i suoi registri e-mail con un fornitore di servizi di condivisione di foto. L'utente può creare un album (è possibile creare più album) e caricare fotografie su di esso. Un altro utente commenta le fotografie e alcuni utenti votano su/giù il commento.

Una chiave per identificare tale voto può apparire come email:album:ts:photo:ts:comment:ts:vote:ts. Questa chiave ha senso? È più lungo di quanto raccomandato? (ts stands timestamp)

risposta

7

In un certo senso questo ha senso, ma cosa memorizzerai nelle tue colonne se tutte le tue informazioni sono nella tua chiave? E sarai sempre in grado di formare quella chiave dal punto di vista dell'applicazione client? Il design dello schema HBase è un argomento abbastanza difficile e dovresti assolutamente vedere questo video dall'HBaseCon dell'anno scorso se hai del tempo libero: HBase Schema Design by Ian Varley.

Per quanto mi riguarda, la cosa più importante da tenere a mente quando si progetta un tasto di riga HBase è "Come recupererò i miei dati?".

Se (come nel tuo esempio) desidera recuperare le immagini da un album specifico, perché non fare la chiave fila qualcosa come email:album e lasciare che diverse famiglie colonna memorizzare le tue foto, commenti, ...

Ora, quando lo fai in questo modo e vuoi recuperare un'immagine specifica, dovrai eseguire una scansione di tutti gli album. Quindi, per evitare che ciò accada, è possibile utilizzare email:picture come chiave, ma questo crea solo lo stesso problema al contrario. Puoi anche usare email:album:picture ma se vuoi ottenere tutte le immagini da un album specifico dovresti conoscere gli identificatori delle immagini o non sarai in grado di formare le tue chiavi.

D'altra parte se un utente può, ad esempio, hanno solo 2000 immagini quindi utilizzando email:picture o email:album come chiave e specificando un filtro di colonna per album o picture non sarà un problema ci sarà HBase ciclo in un massimo di 2000 righe che non richiede così tanto tempo.

Detto questo, a seconda della versione di HBase in uso, è possibile implementare una sorta di indice secondario utilizzando uno FuzzyRowFilter.