17 novembre 2010

Cassandra

NoSQL est à l'honneur de cette édition de Devoxx, avec des speakers de Facebook, Twitter ou LinkedIn. Cassandra, projet Apache opensourcé par FaceBook, basé sur les travaux de Google BigTalbe et Amazon Dynamo, est présenté au cours d'une de ces sessions.

Retour en arrière sur les documents d'architecture d'eBay et l'approche BASE, qui prend le contrepied de l'ACID qui sous-tend nos bases de données relationnelles. En considérant la base de donnée comme un flux de données et non comme un ensemble synchronisé à coup de verrous pessimistes, une nouvelle architecture se profile.

Cassandra utilise des tables en mémoire qui sont flushées sur disque de manière asynchrone. Ce découplage avec les I/O donne à la base un avantage qui booste ses performances, le risque étant compensé par une gestion de version des données via un commit log. Contrairement au mythe, la scalabilité de la base ne concerne pas exclusivement les énormes sites de réseaux sociaux. De la même manière, l'abandon de l'ACID ne signifie pas que les données stockées ne peuvent pas être stratégiques : la gestion de version assure qu'aucune donnée n'est perdue. L'argument type pour justifier un stockage NoSQL est de considérer les applications qui ajoutent un cache distribué au dessus de leur accès base. Le résultat est équivalent sans avoir la puissance d'une base NoSQL.

Une fois cette nouvelle logique acceptée, Cassandra apporte une souplesse sans précédent en terme de scalabilité, de réplication, d'absence d'un "single point of failure". Voilà qui chamboule fondamentalement notre point de vue sur les bases de données et leur administration : la réplication naturelle des noeuds assure une fiabilité et une re-synchronisation des données sans opération d'administration dédiée.

Le format de données utilisé par Cassandra, comme pour Google BigTable, est une série de clé:valeur libres associée à un ID (ColumnFamily). Ce formalisme particulier, très différent du SQL traditionnel, change la donne au problème du dimensionnement et de l'indexation. twissandra (démo ici) sert de base aux démos et explication sur la structure et la manipulation très particulière de ces données. Le modèle simple et connu de tous de twitter et la comparaison avec l'équivalent SQL en font un exemple concret et très parlant. Les requêtes en base ne se basent plus sur des approches ensemblistes mais sur des parcours "sliceQuery" des entrées d'une "table".

La manipulation des données de Cassandra peut monter d'un niveau d'abstraction, avec des frameworks comparables à notre pile Driver / JDBC / JPA. Un portage de Lucene (Lucandra) permet par exemple pour apporter la recherche à notre base NoSQL.