Hibernate OGM : bientôt un nouveau module dans le monde Hibernate ?

Plus besoin de présenter les modules existants du monde Hibernate : Search, Validator, Shards et Envers. Mais un nouveau est apparu dans l'une des conférences de Devoxx animée par Emmanuel Bernard : il s'agit d'Hibernate OGM.

Dans les couloirs de Devoxx, tout le monde parle NoSQL et BigData : plusieurs conférences étaient proposées sur ce sujet notamment avec des démonstrations de Cassandra et MongoDB. Actuellement, la volumétrie des données et la complexité de certains modèles métiers nécessitent de revoir la façon dont sont organisées et stockées les données. La performance et la disponibilité des données sont au cœur des problématiques de beaucoup d'applications.
Mais Hibernate ne compte pas faire objet de figuration dans le monde NoSQL et propose de faire du NoSQL en conservant son API de persistence JPA et en proposant une décorrélation des objets et de la structure de données. Les entités ne seront plus stockées dans une base de données relationnelle mais sous forme d'entrées clé/valeur (à l'image d'une Map).
Hibernate OGM (Object Grid Mapper) a pour objectif de conserver la gestion actuelle de la persistance des entités (objets métiers) mais en proposant un stockage basé sur les dataGrids reconnus pour leur gestion simplifiée de la scalabilité.
En d'autres termes, le projet OGM nous permet de persister nos entités métier existantes dans une base de données non relationnelle sans être obligé de revoir la conception du modèle métier. OGM assure aussi la continuité du langage de requêtes JP-QL, même si pour le moment certaines requêtes complexes restent encore non réalisables.
La démonstration montre que le passage au NoSQL sur une application existante se fait relativement rapidement : quelques modifications dans le fichier de configuration "persistence.xml" (ajout d'un provider HibernateOgnProvider) et ajouts d'annotations d'indexation.
Immédiatement, on constate que nos objets sont bien stockés sous forme de clé/valeur. La clé est constituée du nom de la table et de l'identifiant de l'objet. Et pour gérer les associations / relations entre les objets, OGM stocke un cache d'association avec une clé par navigation.

Emmanuel Bernard nous révèle alors, en détail, les outils et frameworks utilisés par OGM :
  • Hibernate Core avec JPA/EntityManager pour la persistance des entités
  • Hibernate Search pour l'indexation des objets et composants de requêtes
  • Teiid pour permettre les jointures complexes et les agrégations de données
  • Infinispan pour le stockage distribué des données clé/valeur et des indexes Lucene
Le principal inconvénient des outils actuels NoSQL est l'incapacité de gérer et de garantir le mode ACID (Atomicité, Cohérence, Isolisation et Durabilité) que toute transaction en base de données devrait avoir. Le recours à Infinispan dans OGM permet d'assurer cette gestion de transaction.

Le principe actuel d'OGM est donc d'utiliser et de combiner des projets matures ayant déjà faits leurs preuves dans des domaines différents. L'objectif est de fournir :
  • une structure relationnelle
  • avec un stockage en mode NoSQL clé/valeur
  • et toujours avec une API de requêtage (JP-QL)
Il existe à ce jour qu'une version alpha d'Hibernate OGM mais je pense que c'est un projet qui mérite d'être suivi car l'approche proposée pour combiner le modèle relationnel et le NoSQL me semble intéressante et relativement peu coûteuse à mettre en place.