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

Foi útil?

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top