Note : 4 ; 7 livres compressés en un seul.
Je sais que j’aurais dû, mais non je n’ai pas pris plaisir avec ce livre. Mais reprenons depuis le début. Cet ouvrage est calqué sur l’approche de « Seven Languages… ». Le principe est simple : les auteurs abordent 7 bases de données en nous proposant une initiation à chacune d’entre-elle sur 3 jours.
Chaque chapitre est consacré à une base de données, et chacun d’entre-eux est effectivement structuré en 3 parties, soit 9 chapitres en comptant introduction et conclusion pour un total de 310 pages environ. Le tout est très dense et la pente est rude pour chaque chapitre. Elle est d’autant plus rude pour moi que les langages de prédilection choisis sont Ruby et JavaScript (même quand ce n’est pas le langage naturel de la base), que je ne connais pas plus que je ne les apprécie car il s’agit de langages dynamiques.
Je passe l’introduction qui dresse un panel des différentes bases et des paradigmes sur lesquels elles s’appuient. Le second chapitre est consacré à PostgreSQL. C’est du relationnel, je suis en terrain connu. Les premier et second jour vont assez bien, même si on monte assez vite dans les tours avec les fondements mathématiques, les Windows functions et autres triggers. On ne perd pas de temps ! Le 3ème jour nous conduit directement dans les spécificités de PostgreSQL avec les cubes multidimensionnels et l’indexation full text. Je me retrouve aux limites de mes connaissance bien plus vite que prévu.
Le chapitre 3 nous plonge dans le NoSQL avec Riak. J’avais déjà lu des choses sur cette base et les exemples utilisent simplement Curl sur ce premier jour. Ça va, mais le principe des rings est abordé plus que vite, j’aurais été largué si je ne l’avais vu précédemment. Le second jour aborde directement le map-reduce, et en Ruby pour faire bonne mesure ! Le troisième jour aborde la vclock et l’extensibilité de Riak, me voilà sur les genoux.
Au menu de ce 4ème chapitre : HBase ! Malgré les difficultés intrinsèques liées à cette base, le premier jour passe plutôt bien, les auteurs faisant un réel effort pédagogique pour m’aider à comprendre ce qu’est réellement une base orientée colonne. Le second jour est plus délicat. J’arrive à m’accrocher au parsing de Wikimédia, mais le requétage, la compression et le Bloom filter me laissent sur le bas-côté. Hélas pour moi, les exemples en Ruby ont eu ma peau. Je m’attendais à du map-reduce pour le 3ème jour, mais en lieu et place nous avons doit au déploiement sur le cloud sur AWS. Les auteurs vont vite, prennent même des raccourcis et ce n’est pas facile de ne pas perdre pied.
En avant pour notre 4ème base au chapitre 5 : MongoDB. Cette base orientée document est d’un abord simple, cela devrait me permettre de ne pas couler dès le premier chapitre. De fait j’arrive à suivre bien que les exemples écrits en JavaScript ne m’aident pas beaucoup. Mais il s’agit essentiellement de requêtes CRUD. Le début du second jour va à peu près, mais le map-reduce me bloque à nouveau, la faute à ce foutu JavaScript ! Mais pour une fois, ça termine plus calmement avec le jour 3 et les replicat sets. Certainement grâce à l’absence du langage abhorré, car les auteurs ne prennent guère le temps de faire du pas à pas.
CouchDB, qui occupe le chapitre 6, est de nouveau une base orientée document. Un premier jour assez peinard pour requêter cette base résolument orientée web avec Curl. Le second jour commence de même, mais se gâte avec des fonctions écrites en JavaScript puis en Ruby ! Le 3ème jour je n’ose même pas en parle : on y ajoute du Node.js sans même évoquer comment tout cela s’assemble…
En principe, cette avant-dernière base ne devrait pas trop me poser de problème : je suis un peu coutumier de Neo4J qui occupe le chapitre 7. Surprise toutefois au premier jour : les auteurs n’utilisent pas Cypher, mais Gremlin ! En fait, ils vont même jusqu’à utiliser ce langage de requête avec Groovy (alors même que la base est faite pour être utilisée avec Java). Mais je m’en tire. Le second jour nous voit utiliser du Rest en plus et tenter de résoudre les 7 niveaux de Kevin Bacon avec un peu de Ruby. Noyade. On termine le 3ème jour en montant un cluster HA, de façon bien moins pédagogique que dans « des données et des graphes ». Déception.
La dernière base de notre panel est Redis, une base clé-valeur qui est plus ou moins dans la catégorie de Riak. Le premier jour débute en utilisant les commandes et les types Redis. Ca va crescendo mais cela reste convenablement pédagogique. On attaque du plus sérieux au second chapitre, avec la configuration et du clustering en fin de section, et c’est beaucoup moins évident. La troisième journée est inhabituelle, car elle met en œuvre une « persistance polyglotte » avec du CouchDB et du Node.js et fatalement pas mal de JavaScript, l’ensemble compressé en quelques pages est parfaitement obscur.
La conclusion est un agréable bol d’air replaçant chaque base et chaque paradigme dans son sweet spot.
Vous l’aurez compris, le livre n’est pas simple à aborder. Chaque base est traitée en peu de pages, donc on ne prend guère de temps et le lecteur doit suivre. Si comme moi il galère sur les langages utilisés, il a peu d’espoir. Une surprise est l’emploi abondant des particularités techniques. Alors que je croyais qu’on allait rester dans le paradigme principal, les auteurs mettent le turbo et poussent chaque base dans ses retranchements. Il en résulte un livre dont l’obsolescence est bien plus rapide que je ne l’avais imaginé. D’ailleurs une seconde édition a vu le jour en 2018.
Référence complète : Seven Databases in Seven Weeks – Eric Redmond & Jim R. Wilson – Pragmatic Bookshelf 2012 – ISBN : 978 1 93435 692 0