2010-07-15 3 views
22

Tout le monde connaît une bonne implémentation Java ORM pour HBase. Celui-ci ressemble vraiment agréable pour RubyJava ORM pour Hbase

http://www.stanford.edu/~sqs/rhino/doc/

mais n'a pas pu en trouver un pour Java.

Merci.

+10

Pourquoi cette question est close !!!!! c'est une très belle question avec 3390 fois vues! Que font les modérateurs SOF? – Heidarzadeh

+4

Ceci est une question très importante, pourquoi il est considéré comme non constructif? – nitefrog

+0

C'est toujours une question pertinente. La plupart des réponses à cette question indiquent des projets dépassés ou inexistants. Je recommande d'utiliser l'un de ces: [1] Apache Phoenix + Hibernate [2] https://flipkart-incubator.github.io/hbase-object-mapper/ (divulgation: je suis l'auteur de ce projet) –

Répondre

2

Il y a pigi et parhely et je n'ai utilisé aucun d'entre eux. IMO HBase est un moteur de stockage clé/valeur rapide, mais si vous avez besoin d'une autre couche d'abstractions, vous devriez les vérifier.

+0

Merci . Parhely ne semble pas avoir de documentation donc je choisis d'utiliser pigi en premier. –

4

La force de HBase, comme je le vois, est de garder les colonnes dynamiques dans les familles de colonnes statiques. D'après mon expérience de développement d'applications avec HBase, je trouve qu'il n'est pas aussi facile que SQL de déterminer les qualificateurs et les valeurs des cellules. Par exemple, un livre autant d'auteurs, en fonction de vos modèles d'accès, modifications d'auteur, implémentation du cache de couche d'application, vous pouvez choisir d'enregistrer l'auteur entier dans la table du livre (l'auteur réside dans 2 table, auteur table et livre) ou juste l'identifiant de l'auteur. De plus, la collection de l'auteur peut être sauvegardée dans une cellule comme XML/JSON ou des cellules individuelles pour des auteurs individuels. Avec cette compréhension, j'ai conclu que l'écriture d'un ORM complet tel que Hibernate ne serait pas seulement très difficile pourrait ne pas être concluante. J'ai donc adopté une approche différente, beaucoup plus comme iBatis est Hibernate.

Laissez-moi essayer d'expliquer comment cela fonctionne. Pour cela, je vais utiliser les codes source de here et here.

  1. La première tâche consiste à implémenter une interface ObjectRowConverter, dans ce cas SessionDataObjectConverter. La classe abstraite résume les meilleures pratiques de base telles que discutées et apprises de la communauté HBase. L'extension vous donne essentiellement 100% de contrôle sur la façon de convertir votre objet en rangée HBase et vice-versa. Pour cette seule restriction de l'API est que vos objets de domaine doivent implémenter l'interface PersistentDTO qui est utilisée en interne pour créer Put, Delete, do byte [] à l'objet id et vice versa.
  2. La tâche suivante consiste à câbler les dépendances comme dans HBaseImplModule. S'il vous plaît laissez-moi savoir si vous êtes intéressé, je vais passer par les injections de dépendance.

Et c'est tout. Comment ils sont utilisés sont disponibles here. Il utilise essentiellement CommonReadDao, CommonWriteDao pour lire et écrire des données depuis et vers HBase. La lecture dao commune implémente la conversion de ligne à objet multithread sur requêtes, multithread get by ids, get par id et a ses API comme Hibernate Criteria pour interroger HBase via Scan (aucune fonction d'agrégation disponible). Common write dao implémente le code commun d'écriture avec quelques fonctionnalités supplémentaires, telles que le verrouillage optimiste/pessimiste, l'entité de vérification de remplacement/fusion de cellule (non) -existence sur save, update, delete etc.

Cet ORM a été développé pour notre but interne et j'ai été jusqu'à mon cou et ne peut donc pas encore faire de la documentation.Mais si vous êtes intéressé faites le moi savoir et je prendra le temps pour la documentation avec la priorité.

2

Nous utilisons HBase ORM - Surus https://github.com/mushkevych/surus/wiki

probablement utile de mentionner

  • nous l'utilisons fortement avec Hadoop carte/réduire
  • il a un module supplémentaire qui vous permet de pomper dans les données HBase du flux JSON (dans notre cas, il vient du code Python)