como projetar esquema HBase?
Pergunta
supor que eu tenho esta tabela RDBM ( do atributo de entidade value_model ):
col1: entityID
col2: attributeName
col3: value
e eu quero usar HBase devido à escala questões.
Eu sei que a única forma de acesso à tabela HBase está usando uma chave primária (cursor). você pode obter um cursor para uma chave específica, e repetir as linhas um-por-um.
A questão é que, no meu caso, eu quero ser capaz de iterate em todas as 3 colunas. por exemplo:
- para um determinado um EntityID eu quero começar todos os seus attriutes e valores
- para uma attributeName dar e valor eu quero todos os entitiIDS ...
então uma idéia que eu tinha é construir uma tabela HBase que vai conter os dados (tabela de dados, com EntityID como índice primário) e 2 "índice" mesas um com attributeName como uma chave primária, e outra com o valor
cada tabela índice vai realizar uma lista de ponteiros (entityIDs) para a tabela de dados.
É uma abordagem razoável? ou se é um 'abuso' de conceitos HBase?
Neste blog o autor dizer:
HBase permite operações sobreviver primária chave e scans (pense: cursor) mais de fileira gamas. (Se você tem escala e necessidade de índices secundários, não se preocupe - Lucene para o resgate! Mas isso é outro post.)
Você sabe como Lucene pode ajudar?
- Yonatan
Solução
Índices secundários seria realmente útil para muitas aplicações potenciais de HBase, e eu acredito que os desenvolvedores estão de fato olhando para ele. Caixa http://www.mail-archive.com /hbase-dev@hadoop.apache.org/msg04801.html .
Nesse meio tempo, porém, se o seu armazenamento de dados do aplicativo pode ser modelado como um esquema em estrela (ver http : //en.wikipedia.org/wiki/Star_schema ) que você gostaria de fazer o checkout da solução que Hypertable propõe para as necessidades do tipo índice secundário http://markmail.org/message/rphm4q6cbar2ycgp
Outras dicas
Eu recomendo ter duas mesas planas diferentes: um para procurar atributos + valores dados EntityID, e um para procurar o EntityID dada atributos + valores
.Tabela 1 ficaria assim:
entityID1 {
attribute1: value1;
attribute2: value2;
...
}
e Tabela 2:
attribute1_value1 {
entityID1;
}
attribute2_value2 {
entityID1;
}