Un provider ADO.NET pour Bamboo Prevalence

Ca a mis le temps (annonce il y a un an), mais ça y est : le fournisseur ADO.NET pour le moteur de prévalence objet Bamboo est enfin disponible, en Open Source bien sûr, sur GitHub :

https://github.com/MGDIS/mgdis.data.bambooclient

image

C’est la société pour laquelle je travaille, MGDIS, qui l’édite selon la LGPL 3. Je ne vais pas reproduire ici le readme associé, ni réexpliquer pourquoi on a besoin de ce fournisseur pour favoriser la migration vers cet excellente (et trop peu connue) technologie qu’est la prévalence objet, mais juste une petite explication globale pour ouvrir votre appétit Sourire

La prévalence objet est une technologie qui existe depuis un bon bout de temps, et qui consiste à se débarrasser complètement de tout effort de gestion de la persistance, en programmant uniquement sur le modèle objet en mémoire. La persistance est bien sûr gérée en arrière-plan, pour ne pas tout perdre en cas de coupure électrique ou de plantage du processus, mais tout est réalisé de manière transparente. La seule condition est que le modèle ne soit modifié que par des commandes sérialisables, ce qui rend d’ailleurs la technologie très pratique dans des approches CQRS. Un système de logs et de snapshots permet d’améliorer les performances de reprise, et les performances en fonctionnement sont évidemment phénoménales, puisque non seulement tout est en mémoire, mais en plus tout est dans un modèle objet, donc pas besoin de transformer depuis une approche tabulaire, ou graphe, ou autre.

A part l’aspect psychologique (lors de la première rencontre avec la prévalence objet, on a du mal à croire qu’une librairie de 50 Ko peut permettre à des applications d’aller BEAUCOUP plus vite qu’en utilisant des bases de données indexées qui prennent 200 Mo en mémoire dès qu’on charge une instance), il y a un frein à l’adoption de la prévalence objet, à savoir qu’on ne peut requêter qu’en langage objet (ou en Linq, quand on est sur Bamboo) et pas en SQL.

C’est ce que cherche à faciliter ce fournisseur ADO.NET pour Bamboo, en proposant une solution pour réutiliser les requêtes SQL existantes. Le legacy SQL dans les applications LOB est souvent très lourd…

Le fonctionnement est simple, et compliqué à la fois. En théorie, il suffit de décomposer le SQL, puis de reconstruire une requête Linq pour exécuter la requête correspondante sur les objets gérés par la prévalence. En pratique, cela veut dire construire dynamiquement des expressions lambda, et ça… c’est quand même un peu chaud. Mine de rien, on a :

  • un niveau d’indirection entre le SQL et le modèle
  • un autre entre le SQL et l’arbre décomposé de la requête
  • un autre entre l’arbre et la requête Linq
  • un quatrième entre la partie Where ou Having et l’expression lambda
  • un cinquième entre l’expression lambda compilée et sa représentation en mémoire
  • un dernier entre la représentation mémoire et l’API Expressions de .NET

Cette complexité a usé deux stagiaires avant de trouver le bon, à savoir Damien Gaillard, qui a fait un excellent boulot d’implémentation de cette architecture. Le code a été un peu modifié pour être publié sur GitHub (version anglaise, réécriture de commentaires, structuration de classes différente), et il manque certaines parties comme la gestion des Group By, Having, etc. que je rajouterai plus tard. L’essentiel est que les principes soient exposés aux commentaires de tous. Même si vous ne comprenez pas le principe du fournisseur pour Bamboo, n’hésitez pas à jeter un oeil. Tous les commentaires constructifs, même sur des détails, sont les bienvenus !

En espérant que ce petit projet aidera à l’adoption de la prévalence objet en favorisant la migration d’applications avec beaucoup de SQL, et qu’il donnera également des idées de programmation dynamique. Sur ce point justement, une prochaine version basée sur Roslyn est à l’ordre du jour, mais je n’ose pas annoncer de date, vu que j’ai mis un an à publier ce premier code Sourire

About JP Gouigoux

Jean-Philippe Gouigoux est Architecte Logiciel, MVP Connected Systems Developer. Il intervient régulièrement à l'Université de Bretagne Sud ainsi qu'à l'Agile Tour. Plus de détails sur la page "Curriculum Vitae" de ce blog.
This entry was posted in .NET, C#, Performance and tagged . Bookmark the permalink.

One Response to Un provider ADO.NET pour Bamboo Prevalence

  1. JP Gouigoux says:

    Pour faire suite à une question qui m’a été posée hors blog, oui, c’est le même principe que le connecteur ODBC pour MongoDB qu’on peut trouver sur http://blog.mongodb.org/post/49852036514/odbc-connector-for-mongodb : l’idée est, dans la même approche, de laisser un point d’entrée SQL pour faciliter la migration vers une technologie qui ne le supporte pas nativement. L’idée étant bien sûr que cette étape soit temporaire, et que les nouvelles requêtes se fassent avec les solutions natives, en l’occurrence du Linq-To-Objects pour Bamboo.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha Captcha Reload