Pergunta

Estou trabalhando em um projeto com um amigo que utilizará o Hbase para armazenar seus dados.Existem bons exemplos de consulta?Parece que estou escrevendo uma tonelada de código Java para iterar através de listas de RowResult quando, no campo SQL, eu poderia escrever uma consulta simples.Estou esquecendo de algo?Ou está faltando alguma coisa no Hbase?

Foi útil?

Solução

Acho que você, como muitos de nós, está cometendo o erro de tratar o bigtable e o HBase como apenas mais um RDBMS, quando na verdade é um modelo de armazenamento orientado a colunas destinado a armazenar e recuperar com eficiência grandes conjuntos de dados esparsos.Isso significa armazenar, idealmente, relacionamentos muitos para um em uma única linha, por exemplo.Suas consultas devem retornar poucas linhas, mas conter (potencialmente) muitos pontos de dados.

Talvez se você nos contasse mais sobre o que está tentando armazenar, poderíamos ajudá-lo a projetar seu esquema para corresponder à maneira de fazer as coisas do bigtable/HBase.

Para um bom resumo do que o HBase faz de maneira diferente de um RDBMS "tradicional", confira este artigo incrível: Impedância correspondente:Quando usar o HBase por Bryan Duxbury.

Outras dicas

Se você deseja acessar o HBase usando uma linguagem de consulta e um driver JDBC, é possível.Paul Ambrose lançou uma biblioteca chamada HBQL em hbql.com que o ajudará a fazer isso.Eu o usei em alguns projetos e funciona bem.Obviamente você não terá acesso ao SQL completo, mas isso facilita um pouco o uso.

Eu olhei para Hadoop e Hbase e como Sean disse, logo percebi que isso não me dava o que eu realmente queria, que era um banco de dados agrupado compatível com JDBC.

Eu acho que você poderia estar melhor usando algo como C-JDBC ou HA-JDBC que se parece mais com o que eu procurava.(Pessoalmente, não fui mais longe com nenhum deles além de ler a documentação, então não posso dizer qual deles é bom, se houver.)

Eu recomendo dar uma olhada no Apache Colmeia projeto, que é semelhante ao HBase (no sentido de que é um banco de dados distribuído) que implementa uma linguagem SQL.

Obrigado pela resposta Sean e desculpe pela minha resposta tardia.Muitas vezes cometo o erro de tratar o HBase como um RDBMS.Na verdade, tantas vezes tive que reescrever o código por causa disso!É uma coisa tão difícil de desaprender.

No momento temos apenas 4 mesas.O que, neste caso, é muito pouco considerando minha formação.Eu só esperava usar alguns Funcionalidade RDBMS, mantendo principalmente o modelo de armazenamento orientado a colunas.

Fico feliz em saber que vocês estão usando o HBase!Não sou um especialista nem um pouco, mas aqui estão algumas coisas que podem ajudar.

  • O HBase é baseado/inspirado no BigTable, que é exposto pelo AppEngine como sua API de banco de dados, então navegando em seus documentos deve ajudar muito se você estiver trabalhando em um webapp.

  • Se você não estiver trabalhando em um aplicativo da web, o tipo de iteração que você está descrevendo geralmente é tratado via map/reduce (não emita os valores que você não deseja).Ignorar valores usando iteradores praticamente garante que seu aplicativo terá gargalos com conjuntos de dados do tamanho do HBase.Se você ainda está pensando em SQL, confira o tutorial pig e o tutorial hive da cloudera.

  • Basicamente, toda a diferença mental do HBase/SQL (para aplicativos não-web) se resume a "Envie a computação para os dados, não envie os dados para a computação" - se você tiver isso em mente enquanto estiver codificando, você ' tudo bem :-)

Cumprimentos,

Davi

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top