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.