Question

Je travaille sur un projet avec un ami qui utilisera Hbase pour stocker ses données.Existe-t-il de bons exemples de requêtes ?Il me semble que j'écris une tonne de code Java pour parcourir des listes de RowResult alors que, dans le domaine SQL, je pourrais écrire une requête simple.Est-ce que j'ai raté quelque chose ?Ou est-ce que Hbase manque quelque chose ?

Était-ce utile?

La solution

Je pense que vous, comme beaucoup d'entre nous, faites l'erreur de traiter bigtable et HBase comme un simple SGBDR alors qu'il s'agit en fait d'un modèle de stockage orienté colonnes destiné à stocker et récupérer efficacement de grands ensembles de données clairsemées.Cela signifie stocker, idéalement, des relations plusieurs-à-un dans une seule ligne, par exemple.Vos requêtes doivent renvoyer très peu de lignes mais contenir (potentiellement) de nombreux points de données.

Peut-être que si vous nous en disiez plus sur ce que vous essayez de stocker, nous pourrions vous aider à concevoir votre schéma pour qu'il corresponde à la manière de faire bigtable/HBase.

Pour un bon aperçu de ce que HBase fait différemment d'un SGBDR "traditionnel", consultez cet article génial : Impédance correspondante :Quand utiliser HBase par Bryan Duxbury.

Autres conseils

Si vous souhaitez accéder à HBase à l'aide d'un langage de requête et d'un pilote JDBC, c'est possible.Paul Ambrose a publié une bibliothèque appelée HBQL sur hbql.com qui vous aidera à le faire.Je l'ai utilisé pour quelques projets et cela fonctionne bien.Vous n’aurez évidemment pas accès au SQL complet, mais cela le rend un peu plus facile à utiliser.

J'ai regardé Hadoop et Hbase et comme Sean a dit, j'ai vite réalisé que cela ne me donnait pas ce que je voulais réellement, à savoir une base de données en cluster conforme à JDBC.

Je pense que tu ferais mieux d'utiliser quelque chose comme C-JDBC ou HA-JDBC ce qui ressemble plus à ce que je recherchais.(Personnellement, je ne suis pas allé plus loin avec aucun de ces éléments à part lire la documentation, donc je ne peux pas dire lequel d'entre eux est bon, le cas échéant.)

Je recommanderais de jeter un oeil à Apache Ruche projet, qui est similaire à HBase (dans le sens où il s'agit d'une base de données distribuée) qui implémente un langage de type SQL.

Merci pour la réponse Sean et désolé pour ma réponse tardive.Je fais souvent l'erreur de traiter HBase comme un SGBDR.Si souvent en fait que j'ai dû réécrire du code à cause de cela !C'est une chose tellement difficile à désapprendre.

Pour l'instant, nous n'avons que 4 tables.Ce qui, dans ce cas, est très peu compte tenu de mon parcours.J'espérais juste utiliser quelques Fonctionnalité SGBDR tout en s'en tenant principalement au modèle de stockage orienté colonnes.

Heureux d'apprendre que vous utilisez HBase !Je ne suis pas du tout un expert, mais voici quelques éléments qui pourraient vous aider.

  • HBase est basé sur/inspiré de BigTable, qui est exposé par AppEngine en tant qu'API de base de données, donc parcourir leurs documents devrait être très utile si vous travaillez sur une application Web.

  • Si vous ne travaillez pas sur une application Web, le type d'itération que vous décrivez est généralement géré via map/reduce (n'émettez pas les valeurs que vous ne souhaitez pas).Ignorer les valeurs à l'aide d'itérateurs garantit pratiquement que votre application aura des goulots d'étranglement avec des ensembles de données de la taille d'HBase.Si vous pensez toujours à SQL, consultez le didacticiel Pig et le didacticiel Hive de Cloudera.

  • Fondamentalement, toute la différence mentale HBase/SQL (pour les applications non Web) se résume à "Envoyer le calcul aux données, n'envoyez pas les données au calcul" - si vous gardez cela à l'esprit pendant que vous codez. tout ira bien :-)

Salutations,

David

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top