No SQL
No SQL
I .T I S O P E N
“NoSQL : les meilleures
solutions open source”
Page 2
PREAMBULE
SMILE
Smile est une société d’ingénieurs experts dans la mise en œuvre de solutions open source
et l’intégration de systèmes appuyés sur l’open source. Smile est membre de l’APRIL,
l’association pour la promotion et la défense du logiciel libre, du PLOSS – le réseau des
entreprises du Logiciel Libre en Ile-de-France et du CNLL – le conseil national du logiciel libre.
[Link]
Smile compte plus de 1200 collaborateurs dans le monde ce qui en fait le premier
intégrateur français et européen de solutions open source.
Depuis 2000, environ, Smile mène une action active de veille technologique qui lui permet
de découvrir les produits les plus prometteurs de l’open source, de les qualifier et de les
évaluer, de manière à proposer à ses clients les produits les plus aboutis, les plus robustes et
les plus pérennes.
Cette démarche a donné lieu à toute une gamme de livres blancs couvrant différents
domaines d’application. La gestion de contenus (2004), les portails (2005), la business
intelligence (2006), la virtualisation (2007), et la gestion électronique de documents (2008),
les PGIs/ERPs (2008), les VPN open source (2009), les Firewall et Contrôle de flux (2009), les
Middleware orientés messages (2009), l’ecommerce et les Réseaux Sociaux d'Entreprise
(2010) et plus récemment, le Guide de l’open source (2011). Chacun de ces ouvrages
présente une sélection des meilleures solutions open source dans le domaine considéré,
leurs qualités respectives, ainsi que des retours d’expérience opérationnels.
Au fur et à mesure que des solutions open source solides gagnent de nouveaux domaines,
Smile sera présent pour proposer à ses clients d’en bénéficier sans risque. Smile apparaît dans
le paysage informatique français comme le prestataire intégrateur de choix pour
accompagner les plus grandes entreprises dans l’adoption des meilleures solutions open
source.
Ces dernières années, Smile a également étendu la gamme des services proposés. Depuis
2005, un département consulting accompagne nos clients, tant dans les phases d’avant-
projet, en recherche de solutions, qu’en accompagnement de projet. Depuis 2000, Smile
dispose d’un studio graphique, devenu en 2007 Smile Digital – agence interactive, proposant
outre la création graphique, une expertise e-marketing, éditoriale, et interfaces riches. Smile
dispose aussi d’une agence spécialisée dans la TMA (support et l’exploitation des applications)
et d’un centre de formation complet, Smile Training. Enfin, Smile est implanté à Paris, Lille,
Lyon, Grenoble, Nantes, Bordeaux, Poitiers, Aix-en-provence et Montpellier. Et présent
également en Espagne, en Suisse, au Benelux, en Ukraine et au Maroc.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 3
QUELQUES REFERENCES DE
SMILE
SMILE est fier d’avoir contribué, au fil des années, aux plus grandes réalisations Web
françaises et européennes. Vous trouvez ci-dessous quelques clients nous ayant adressé leur
confiance.
Sites Internet
[Link]
EMI Music, Salon de l’Agriculture, Mazars, Areva, Société Générale, Gîtes de France, Patrice
Pichet, Groupama, Eco-Emballage, CFnews, CEA, Prisma Pub, Véolia, NRJ, JCDecaux,
01 Informatique, Spie, PSA, Boiron, Larousse, Dassault-Systèmes, Action Contre la Faim, BNP
Paribas, Air Pays de Loire, Forum des Images, IFP, BHV, ZeMedical, Gallimard, Cheval Mag,
Afssaps, Benetaux, Carrefour, AG2R La Mondiale, Groupe Bayard, Association de la
Prévention Routière, Secours Catholique, Canson, Veolia, Bouygues Telecom, CNIL…
E-Commerce
Krys, La Halle, Gibert Joseph, De Dietrich, Adenclassifieds, Macif, Furet du Nord, Gîtes de
France, Camif Collectivité, GPdis, Longchamp, Projectif, ETS, Bain & Spa, Yves Rocher,
Bouygues Immobilier, Nestlé, Stanhome, AVF Périmédical, CCI, Pompiers de France,
Commissariat à l’Energie Atomique, Snowleader, Darjeeling…
ERP et Décisionnel
Veolia, La Poste, Christian Louboutin, Eveha, Sun’R, Home Ciné Solutions, Pub Audit, Effia,
France 24, Publicis, iCasque, Nomadvantage, Gets, Nouvelles Frontières, Anevia, Jus de Fruits
de Mooréa, Espace Loggia, Bureau Veritas, Skyrock, Lafarge, Cadremploi, [Link],
Groupe Vinci, IEDOM (Banque de France), Carrefour, Jardiland, Trésorerie Générale du Maroc,
Ville de Genève, ESCP, Sofia, Faiveley Transport, INRA, Deloitte, Yves Rocher, ETS, DGAC,
Generalitat de Catalunya, Gilbert Joseph, Perouse Médical…
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 4
Gestion documentaire
Primagaz, UCFF, Apave, Géoservices, Renault F1 Team, INRIA, CIDJ, SNCD, Ecureuil Gestion, CS
informatique, Serimax, Véolia Propreté, NetasQ, Corep, Packetis, Alstom Power Services,
Mazars…
Infrastructure et Hébergement
Agence Nationale pour les Chèques Vacances, Pierre Audoin Consultants, Rexel, Motor
Presse, OSEO, Sport24, Eco-Emballage, Institut Mutualiste Montsouris, ETS, Ionis, Osmoz,
[Link]
SIDEL, Atel Hotels, Cadremploi, SETRAG, Institut Français du Pétrole, Mutualité Française…
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 5
CE LIVRE BLANC
Avec l’essor des grandes plateformes web, le volume de données à gérer par les applications
a explosé, et les systèmes de gestion de données traditionnels, relationnels et
transactionnels, basés sur le langage SQL, ont montré leurs limites.
Depuis quelques années, de nouvelles approches du stockage et de la gestion des données
sont apparues, qui permettent de s’astreindre de certaines contraintes, en particulier de
scalabilité, inhérentes au paradigme relationnel. Regroupées derrière le vocable NoSQL, ces
technologies auraient très bien pu être nommées “NoRel” comme le suggère lui-même
[Link]
N’hésitez pas à nous transmettre vos avis et évaluations sur les produits présentés
dans ce livre blanc. Une seule adresse : contact@[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 6
SOMMAIRE
PREAMBULE................................................................................................ 2
SMILE ................................................................................................................................................................... 2
QUELQUES REFERENCES DE SMILE............................................................................................................................... 3
CE LIVRE BLANC....................................................................................................................................................... 5
SOMMAIRE ............................................................................................................................................................ 6
[Link]
ETAT DE L’ART............................................................................................. 8
LES SGBD RELATIONNELS ......................................................................................................................................... 8
DES ACTEURS BIEN INSTALLES............................................................................................................................ 8
LIMITES DES SGBD RELATIONNELS DANS LES ARCHITECTURES DISTRIBUEES ................................................................ 9
LES LIMITES DES SYSTEMES DE SGBD RELATIONNELS FACE AUX USAGES ................................................................... 12
VERS L’ECLOSION DE DIFFERENTS PARADIGMES ............................................................................................................ 13
POURQUOI LA SOLUTION N’EST ELLE PAS UNIQUE ? ............................................................................................. 13
TYPES DE BASE NOSQL : PARADIGME CLE / VALEUR ............................................................................................ 13
TYPES DE BASE NOSQL : BASES DOCUMENTAIRES ............................................................................................... 14
TYPES DE BASE NOSQL : BASES ORIENTEES COLONNES ........................................................................................ 16
TYPES DE BASE NOSQL : PARADIGME GRAPHE ................................................................................................... 17
DE NOUVEAUX PARADIGMES ENTRAINANT DE NOUVELLES PRATIQUES ..................................................................... 18
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 7
COUCHDB ........................................................................................................................................................... 46
DOCUMENTS ET VUES SOUS COUCHDB............................................................................................................. 46
ARCHITECTURE ............................................................................................................................................ 47
OUTILS DE DEVELOPPEMENT ........................................................................................................................... 50
OUTIL DE PRODUCTION.................................................................................................................................. 51
CONCLUSION ............................................................................................................................................... 52
CONCLUSION ............................................................................................ 53
NOSQL : POUR QUELS USAGES ? ..................................................................................................................... 53
NOSQL : LES SOLUTIONS MATURES .................................................................................................................. 54
[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 8
ETAT DE L’ART
depuis plus de 20 ans. Cette situation de leadership technologique peut facilement être
expliquée par plusieurs facteurs.
Tout d’abord, SQL est un langage standardisé. Bien que chaque fournisseur de base de
données ait implémenté quelques variantes, il n’en demeure pas moins que ce socle commun
est bien connu par les développeurs. Pour une entreprise, investir dans une technologie SQL
s’avère donc moins coûteux sur le plan de la formation que toute autre technologie. Cela
explique sans doute l’échec des bases de données objets que l’on a vu fleurir autour des
années 2000 et qui n’ont jamais véritablement percé, malgré une approche novatrice.
Ensuite, SQL embarque de nombreuses fonctionnalités importantes, adaptées aux besoins
des entreprises, en particulier la gestion de l’intégrité des données et l’implémentation de
transactions, indispensables pour bon nombre d’applications de gestion. Dans un monde où
l’informatique de gestion a représenté une part très importante des besoins durant ces
dernières décennies, ces fonctionnalités sont devenues attendues et indispensables dans une
base de données.
Enfin, les outils permettant l’exploitation de ce type de bases de données sont matures. Que
l’on se place au niveau des outils de développements (IDE graphiques, intégration dans les
langages et les frameworks, …) ou d’exploitation (outils de sauvegarde, monitoring, …), les
solutions existent et sont prêtes depuis déjà un certain temps. On peut donc considérer SQL
comme un standard de fait pour toute problématique ayant trait au stockage et à la
manipulation de données.
Pourtant, un certain nombre de limitations importantes sont apparues au fil des années. Les
premiers acteurs à buter sur ces limites furent les fournisseurs de services en ligne les plus
populaires, tels que Yahoo, Google ou plus récemment les acteurs du web social comme
Facebook, Twitter ou LinkedIn. Le constat était simple : les SGBD relationnels ne sont pas
adaptés aux environnements distribués requis par les volumes gigantesques de données et
par les trafics tout aussi gigantesques générés par ces opérateurs.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 9
Les besoins majeurs identifiés par ces acteurs sont les suivants :
Capacité à distribuer les traitements sur un nombre de machines important afin
d’être en mesure d’absorber des charges très importantes. On parlera de scaling des
traitements.
Capacité à répartir les données entre un nombre important de machines afin d’être
en mesure de stocker de très grands volumes de données. On parlera plutôt de
scaling des données.
La distribution de données sur plusieurs datacenters afin d’assurer une continuité de
service en cas d'indisponibilité de service sur un datacenter. Cette approche doit par
ailleurs permettre que les données soient au plus proche des personnes qui les
[Link]
utilisent.
Une architecture qui fonctionne sur du matériel peu spécialisé et donc facilement
remplaçable en cas de panne.
Dans des contextes plus modestes, il est apparu que les solutions développées par ces
opérateurs SaaS, disposaient de caractéristiques intéressantes en ce qui concerne la
modélisation des données, permettant notamment de s’émanciper d’une certaine rigidité des
modèles relationnels standards.
La mise en œuvre de tels mécanismes a un coût considérable dés lors que l’on se trouve dans
le contexte d’un système distribué. Sur la plupart des SGBD relationnels, il convient de
s’assurer en permanence que les données liées entre elles sont placées sur le même nœud du
serveur. Lorsque le nombre de relations au sein d’une base augmente, il devient de plus en
plus difficile de placer les données sur des nœuds différents du système.
Nous verrons que les systèmes NoSQL adressent de différentes manières ce problème selon
les besoins.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 10
Outre leur modèle relationnel, la plupart des moteurs de SGBDs relationnels sont
transactionnels ce qui leur impose le respect des contraintes Atomicity Consistency Isolation
Durability, communément appelé par son acronyme ACID :
A comme Atomicity : Cela signifie que les mises à jour de la base de données doivent
être atomiques, c’est-à-dire qu'elles doivent être totalement réalisées ou pas du tout.
Par exemple, sur 5000 lignes devant être modifiées au sein d’une même transaction,
si la modification d'une seule échoue, alors la transaction entière doit être annulée.
C'est primordial, car chaque ligne modifiée peut dépendre du contexte de
modification d'une autre, et toute rupture de ce contexte pourrait engendrer une
incohérence des données de la base.
[Link]
C comme Consistency : Cela signifie que les modifications apportées à la base doivent
être valides, en accord avec l'ensemble de la base et de ses contraintes d'intégrité. Si
un changement enfreint l'intégrité des données, alors soit le système doit modifier les
données dépendantes, comme dans le cas classique d’une suppression en cascade,
soit la transaction doit être interdite.
I comme Isolation : Cela signifie que les transactions lancées au même moment ne
doivent jamais interférer entre elles, ni même agir selon le fonctionnement de
chacune. Par exemple, si une requête est lancée alors qu'une transaction est en
cours, le résultat de celle-ci ne peut montrer que l'état original ou final d'une donnée,
mais pas l'état intermédiaire. De fait, les transactions doivent s'enchaîner les unes à la
suite des autres, et non de manière concurrentielle.
D comme Durability : Cela signifie que toutes les transactions sont lancées de
manière définitive. Une base ne doit pas afficher le succès d'une transaction, pour
ensuite remettre les données modifiées dans leur état initial. Pour ce faire, toute
transaction est sauvegardée dans un fichier journal, de sorte que si un problème
survient empêchant sa validation complète, la transaction pourra être correctement
terminée lors de la disponibilité du système.
Dans un contexte centralisé, les contraintes ACID sont plutôt aisées à garantir. Dans le cas de
systèmes distribués, il est en revanche nécessaire de distribuer les traitements de données
entre différents serveurs. Il devient alors difficile de maintenir les contraintes ACID à l’échelle
du système distribué entier tout en maintenant des performances correctes. Comme on le
verra, la plupart des SGBD de la mouvance NoSQL ont donc été construits en faisant fi des
contraintes ACID quitte à ne pas proposer de fonctionnalités transactionnelles.
Il existe par ailleurs, une limitation plus théorique à ce que peuvent réaliser les bases de
données relationnelles distribuées qui est décrite par le théorème de CAP (Consistency-
Availibility-Partition tolerance). Celui-ci énonce trois grandes propriétés pour les systèmes
distribués :
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 11
Le théorème de CAP stipule qu’il est impossible d’obtenir ces trois propriétés en même temps
dans un système distribué et qu'il faut donc en choisir deux parmi les trois :
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 12
relationnels. Au fur et à mesure du temps, les structures de données manipulées par les
systèmes sont devenues de plus en plus complexes avec en contrepartie des moteurs de
stockage évoluant peu.
Le principal point faible des modèles relationnels est l’absence de gestion d’objets
hétérogènes ainsi que le besoin de déclarer au préalable l’ensemble des champs représentant
un objet. Pour répondre au besoin des objets hétérogènes non pré-déclarés, on a vu
apparaître des modélisations complexes sur le plan algorithmique comme le modèle Entity-
Attribute-Value permettant de séparer un objet et ses champs. Ces modèles, quoique
répondant au besoin de flexibilité des applications modernes, présentent un inconvénient
majeur qui est leur très faible niveau de performance. La majeure partie des outils
développés dans le cadre de la mouvance NoSQL permettent l’utilisation d’objets
hétérogènes apportant comparativement une bien plus grande flexibilité dans les modèles de
données ainsi qu’une simplification de la modélisation.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 13
VERS L’ECLOSION DE
DIFFERENTS PARADIGMES
de données, on ne doit pas considérer qu’un seul autre outil sera en mesure d’apporter une
solution au caractère universel. Rappelons à ce titre que la mouvance NoSQL ne prône
d’ailleurs pas l’abandon total de SQL mais se traduit plutôt par “Not Only SQL” et non “No
SQL”. A ce titre, il existe dans la mouvance NoSQL une diversité importante d’approches. que
nous classons en quatre grandes catégories : Paradigme clé / valeur, Bases orientées
colonnes, Bases documentaires et Bases orientées graphes.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 14
Dans ce modèle on ne dispose généralement que des quatre opérations Create Read Update
Delete (CRUD):
Create : créer un nouvel objet avec sa clé → create(key, value)
Read : lit un objet à partir de sa clé → read(key)
Update : met à jour la valeur d’un objet à partir de sa clé → update(key, value)
Delete: supprime un objet à partir de sa clé → delete(key)
Les bases de ce type disposent pour la plupart d’une interface HTTP REST permettant de
[Link]
procéder très simplement à des requêtes, et ceci depuis n’importe quel langage de
développement.
L’approche volontairement très limitée de ces systèmes sur le plan fonctionnel est radicale et
leur permet d’afficher des performances exceptionnellement élevées en lecture et en
écriture ainsi qu’une scalabilité horizontale considérable. Le besoin de scalabilité verticale
est fortement réduit au niveau des bases par le caractère très simple des opérations
effectuées.
Du fait de leur modèle de requête très simple et réduit aux opérations CRUD, ces systèmes
sont principalement utilisés comme dépôt de données dès lors que les besoins en termes de
requêtes sont très simples. On les retrouve très souvent comme système de stockage de
cache ou de sessions distribuées, notamment là où l’intégrité relationnelle des données est
non significative.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 15
[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 16
colonne est définie par un couple clé / valeur. Une colonne contenant d’autres
colonnes est nommée super-colonne.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 17
[Link]
Les super-colonnes situées dans les familles de colonnes sont souvent utilisées comme les
lignes d’une table de jointure dans le modèle relationnel. Comparativement au modèle
relationnel, les bases orientée colonnes offrent plus de flexibilité. Il est effet possible
d’ajouter une colonne ou une super colonne à n’importe quelle ligne d’une famille de
colonnes, colonnes ou super-colonne à tout instant.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 18
Par essence ces bases de données sont nettement plus efficaces que leur pendant relationnel
pour traiter les problématiques liées aux réseaux (cartographie, relations entre personnes,
...). En effet, lorsqu'on utilise le modèle relationnel, cela nécessite un grand nombre
d’opérations complexes pour obtenir des résultats.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 19
Dans les autres cas, on stockera simplement les identifiants permettant d’accéder aux
données comme on le ferait dans le modèle relationnel. La différence réside dans le
fait que c’est le plus souvent à l’application de procéder par la suite aux jointures.
[Link]
MapReduce :
MapReduce est une technique de programmation distribuée très utilisée dans le milieu
NoSQL et qui vise à produire des requêtes distribuées. Cette technique se décompose en deux
grandes étapes :
Etape de mapping : Chaque item d’une liste d’objets clé/valeur est passé à la fonction
map qui va retourner un nouvel élément clé-valeur. Exemples de fonction map :
o A un couple (UserId, User), on assigne le couple (Role, User). A l’issue de
l’étape de mapping, on obtient une liste contenant les utilisateurs groupés
par rôle
o A un couple (UserId, User) on assigne le couple (UserId, User) uniquement si
l’email de l’utilisateur se termine par “.fr”
o ...
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 20
L’étape de mapping peut être parallélisée en traitant l’application sur différents nœuds du
système pour chaque couple clé-valeur. L’étape de réduction n’est pas parallélisée et ne peut
être exécutée avant la fin de l’étape de mapping.
Les bases de données NoSQL proposent diverses implémentations de la technique
MapReduce permettant le plus souvent de développer les méthodes map et reduce en
Javascript ou en Java.
[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 21
Dans la mouvance NoSQL, les grands noms de la base de données propriétaire brillent par
leur absence, les solutions citées ci-dessus étant soient open source, soit proposées en SaaS.
Les produits issus du monde SaaS et proposés sur ce mode uniquement, principalement
portés par Google et Amazon, font partie intégrante de l’offre PaaS (Platform as a Service)
mise à disposition des développeurs dans le cadre des frameworks de développements
clouds.
Les produits open source constituent la majorité de l’offre NoSQL, et l’on assiste à une réelle
montée en de ces solutions dans ce secteur, souvent portée par des contributeurs importants
comme Facebook, Twitter, LinkedIn, … Un certain nombre de produits ont été développés
pour les usages internes de ces grands acteurs de l’Internet, puis libérés dans des états
d’avancement très important, puisque déjà en production pour ces grands sites web. Notons
que la fondation Apache joue ici encore un rôle primordial dans ces projets.
Nous listons ci-après les solutions, leur licence et une première analyse.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 22
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 23
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 24
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 25
commerciale
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 26
OUTILS GENERALEMENT
ASSOCIES
Bien que cela ne soit pas le cœur de ce livre blanc, on observe souvent la présence d’outils
complémentaires communs dans le cadre de projets NoSQL. En effet, les besoins suivants
bien que ne faisant pas partie du spectre des problématiques traités par les bases de données
NoSQL sont récurrents dans les projets distribués :
Ce besoin est très souvent associé à des bases de données volumineuses. Moins coûteux que
des architectures de type SAN, il existe des systèmes de fichiers distribués dont les plus
connus sont Lustre1 et MogileFS2.
Recherche distribuée :
La recherche est souvent un élément clé sur un système distribué. On utilisera le plus souvent
le moteur de recherche open source SolR3 qui présente la capacité de construire simplement
un index de recherche distribué.
1
Luste FS : [Link]
2
MogileFS : [Link]
3
SolR : [Link]
4
Hadoop : [Link]
5
[Link] : [Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 27
6
Apache ZooKeeper : [Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 28
Cassandra,
MongoDB,
CouchDB
CASSANDRA
La base de données Cassandra est née dans les locaux de Facebook et a été développée pour
prendre en charge les très gros volumes de données générés par la boite de réception de
Facebook. Le projet fut finalement placé sous l’égide de la fondation Apache qui assure
maintenant la conduite des développements.
Cassandra a été construit comme une base de données orientée colonnes et respecte donc
les principes présentés plus haut pour ce paradigme.
Architecture
L’architecture de Cassandra a été conçue pour être complètement distribuée et ne pas
présenter de point de défaillance unique (Single Point Of Failure ou SPOF). Pour obtenir ce
résultat, tous les nœuds de Cassandra sont équivalents. L’ajout d’un nouveau nœud est très
simple et il suffit pour cela de connaître un seul nœud du cluster (en général, on choisit un
certain nombre de nœuds assez stables nommés Seed pour ajouter de nouveaux nœuds). Au
final, les nœuds sont organisés sous la forme d’un anneau. En cas de défaillance de l’un des
nœuds, il est simplement retiré de l’anneau.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 29
[Link]
Les données sont partitionnées et répliquées entre les différents nœuds. Chaque famille de
colonnes est en fait stockée comme une table de hashage partitionnée de manière homogène
sur le cluster. La stratégie de génération de clés et de partitionnement peut être modifiée par
le concepteur de la base pour chaque famille de colonnes.
En outre Cassandra est capable de gérer deux concepts différents afin de faciliter son
exploitation en datacenters (éventuellement répartis) :
Les racks : Il s’agit de groupe de serveurs liés entre eux. Le groupe de serveurs d’un
même rack contient l’ensemble des données et est autonome. On place souvent deux
racks dans le même datacenter. Les données sont automatiquement dupliquées entre
deux racks
Le datacenter : A chaque rack, on associe un jumeau dans un autre datacenter. Cela
permet d’assurer la réplication entre les deux sites distants.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 30
[Link]
La mise en place de ce type de topologie est gérée via des fichiers de configuration qui
doivent être distribués sur l’ensemble des nœuds. Pour faciliter la gestion de telles
configurations distribuées, on préconisera l’utilisation de l’outil Zookeeper.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 31
Outils de développement
Stabilité de l’API :
Cassandra est un produit relativement jeune dont l’API évolue fortement. Dans un premier
temps, l’accès à la base était uniquement possible via un mécanisme de procédure stockée
(RPC) au travers de Thrift7. L’équipe de développement a entrepris une migration de Thrift
vers Avro8 (tous deux sont des projets de la fondation Apache) ce qui risque de rendre Thrift
obsolète à terme.
[Link]
Langages supportés :
Thrift est la méthode d’accès la plus universelle pour accéder à Cassandra. Cependant, il
s’avère plutôt rudimentaire dans sa manipulation. A ce titre, bien que Thrift offre le support le
plus universel, on privilégiera, lorsqu’elles existent, des bibliothèques de plus haut niveau
s’appuyant sur Thrift. Le support du langage CQL est pour le moment réservé aux seuls
langages Java et Python.
C++ Oui -
7
Thrift : [Link]
8
Avro : [Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 32
Perl Oui -
JavaScript Oui -
On notera par ailleurs, qu’à ce jour, aucun des frameworks majeurs de développement
[Link]
couramment utilisés (Zend, Symfony, Django, ...) n'intègre de support pour Cassandra.
Certains planifient néanmoins son support. Cela risque de s’avérer difficile tant que l’API ne
sera pas stabilisée.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 33
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 34
Il faut bien avoir à l’esprit que plus le degré de cohérence requis est élevé et plus la requête
sera longue à être exécutée. Dans un certains sens, plus le degré de cohérence augmente et
plus le système tend à se comporter non plus comme un système AP (Available et Partition
tolerant) mais comme un système CP (Consistent et Partition tolerant).
Cette dualité de comportement est très intéressante quoi que probablement un peu
complexe à manipuler. Le comportement AP par défaut est satisfaisant dans la majeure partie
des cas réels (liste d’articles, description d’un produit, …). Cependant, il existe des cas dans
lesquels le besoin d’une donnée fiable est important (par exemple dans le cas de
l'interrogation d’un stock au moment d’une validation de commande).
Transactions :
Comme la plupart des outils NoSQL, Cassandra ne propose aucun mécanisme de transaction.
C’est donc à l’application d’assurer les logiques de retour en arrière en cas d’erreur ou
d’interruption d’une procédure multi-étapes. Cela rend un peu plus complexe l’écriture
d’applications métiers transactionnelles. Néanmoins, on commence à voir apparaître des
système de gestions de transactions distribuées qui s’appuie sur Apache Zookeeper pour
fournir ces mécanismes à Cassandra, à l’image du projet prometteur nommé cages9.
Autres considérations :
9
Projet Cages : [Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 35
Outils de production
Scalabilité :
[Link]
Tolérance à la panne :
De par son architecture, conçue pour ne présenter aucun point de défaillance unique et ses
capacités de déploiement sur plusieurs datacenters différents, Cassandra est un système qui
présente une très forte résistance aux pannes.
Outils de monitoring :
Les outils de monitoring spécifiquement adaptés pour Cassandra ne sont pas très nombreux à
ce jour. Il existe cependant un certain nombre de projets communautaires qui permettent le
monitoring dans les applications de supervision les plus courantes que sont Nagios, Munin ou
Cacti.
Par ailleurs, Cassandra expose l’essentiel des métriques utiles du cluster au monitoring via
JMX, rendant possible l’utilisation de l’ensemble des outils de monitoring basée sur JMX.
La meilleure pratique est d’utiliser l’outil nodetool livré avec Cassandra et qui permet de
réaliser une image instantanée de chaque nœud tout en garantissant la cohérence de
l’ensemble de la sauvegarde. Le fait de réaliser une image de chaque nœud permet de
fragmenter la sauvegarde.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 36
Conclusion
Cassandra est un outil relativement complexe. Cette complexité concerne principalement les
développeurs qui devront appréhender de nouvelles manières de construire leur base de
données. Cela peut apparaitre peu naturel de prime abord car intimement liées au paradigme
[Link]
de base orientée colonnes. Par ailleurs ils devront gérer des paramètres supplémentaires
comme le degré de cohérence des requêtes. En outre, la maturité des outils de
développement pourra s’avérer rebutante tout du moins au départ. Nous avons par ailleurs
constaté que la documentation n’était pas d’une qualité irréprochable.
En contrepartie cet outil présente des caractéristiques très intéressantes. Nous retenons
principalement comme avantage :
Des soutiens solides assurant la pérennité de l’outil, avec en chef de file la fondation
Apache.
Un outil éprouvé pour de gros volumes de données par de grands acteurs du Web.
Un outil conçu pour être exploité de manière entièrement distribuée, y compris entre
plusieurs datacenters géographiquement éloignés.
Une structure de données flexible qui permet de stocker des données hétérogènes
La capacité pour le développeur de choisir lui même le comportement attendu en
privilégiant soit la cohérence, soit la performance. Ce permet à l’outil de s’adapter à
des situations assez variées.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 37
MONGODB
MongoDB est une base de données orientée document développée en C++. Le projet dispose
d’une popularité importante et aussi d’utilisateurs de renom comme MTV, Disney,
Foursquare, Sourceforge, [Link], …. Par ailleurs la société 10gen, entité commerciale en charge
du développement de MongoDB fournit des services de support et de formation autour de la
solution, ce qui peut aider à son déploiement.
MongoDB est une base documentaire dans laquelle les documents sont regroupés sous forme
de collections, les collections étant l’équivalent des tables du SQL. Il est possible de
représenter chaque document au format JSON (MongoDB utilise une variante binaire plus
compacte de JSON nommé BSON pour son stockage interne). Chaque document dispose
d’une clé unique permettant de l'identifier dans la collection.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 38
Architecture
Mongo a été conçu pour fonctionner selon plusieurs modes distincts :
serveur seul
réplication maitre / esclave
réplication via Replica Set (ensemble de serveurs traitant les mêmes données)
partitionnement des données selon leur clé via sharding (partitionnement des
données sur plusieurs serveurs)
[Link]
Serveur seul :
Dans ce mode mettant en jeu un seul serveur, un seul processus nommé mongod est utilisé et
traite directement les données issues des requêtes du client. L’architecture est alors très
simple :
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 39
Les données sont écrites sur le maître uniquement. Le maître réplique l’ensemble des
écritures, avec une certaine latence. Le client peut choisir de lire soit sur l’esclave s’il accepte
les erreurs liées à la latence de réplication, soit sur le maître dans le cas contraire.
Ce mode de fonctionnement présente comme faiblesse majeure sa faible tolérance à la
panne, car en cas de panne du serveur maître, l’application cliente est en incapacité d’écrire
sur la base ! Il est nécessaire de procéder à un redémarrage manuel du serveur esclave en
mode maître. Il s’agit alors d’un point de défaillance unique.
Ce mode reste important car il permet aux développeurs de tester les effets de bords liés à la
réplication et donc d’assurer que l’application développée sera à même de fonctionner avec
de telles contraintes. Cela est d’autant plus vrai que le délai de réplication minimale peut être
[Link]
fixé manuellement afin de simuler une latence réseau allant jusqu’à quelques secondes.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 40
[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 41
Par ailleurs, ces serveurs sont susceptibles de recevoir une charge significative. En
effet, lors de requêtes faisant intervenir plusieurs shards, ils sont responsables entre
autres de l’agrégation des résultats. Notons que ces effets de charge peuvent être
limités par un choix approprié des shard keys qui permet aux requêtes de faire
intervenir un nombre limité de shards.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 42
Outils de développement
Stabilité de l’API :
MongoDB est un outil mature dont l’API évolue peu à ce jour. Deux modes d’accès
principaux peuvent être utilisés :
driver spécifique au langage de programmation permettant une communication
directement en BSON
une API REST disponible sous forme d’un serveur HTTP embarqué optionnel
[Link]
Langage supportés :
Mongo supporte officiellement un grand nombre de langage au travers de drivers. Pour les
autres langages, on pourra compter sur un support communautaire assez vaste. Enfin,
certains frameworks commencent à implémenter un support de Mongo (sous forme de
plugins).
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 43
Transactions :
[Link]
Autres considérations :
A l’image de la plupart des solutions NoSQL, MongoDB propose une implémentation de
MapReduce, utilisable en Javascript.
Par ailleurs, Mongo implémente un système de fichiers distribués nommé GridFS permettant
le stockage de fichiers volumineux (pièce jointes, …).
Outil de production
Scalabilité :
De par sa conception, Mongo est scalable selon deux modes :
scalabilité en lecture : celle-ci peut être obtenue simplement en utilisant les replica
set
scalabilité en écriture : celle-ci peut être obtenue via les mécanismes de sharding
10
[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 44
Tolérance à la panne :
Les mécanismes de replica set permettent au système de résister face à la disparition de l’un
de ces nœuds de stockage. Par ailleurs il est possible de placer les nœuds d’un replica set
dans plusieurs datacenters (par exemple en assignant au nœud du datacenter de secours, une
priorité inférieure) pour obtenir un système qui supporte la perte complète d’un datacenter.
Le système est légèrement plus centralisé que certains autres systèmes SQL lorsqu’on utilise
le sharding (présence des nœuds de routage) mais ceux-ci peuvent être dupliqués sans
problème, même sur plusieurs datacenters. Cela ne constitue donc pas non plus un point de
défaillance unique.
[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 45
Conclusion
MongoDB est l’un des outils les plus matures de la mouvance NoSQL et dispose par ailleurs du
support commercial officiel de son éditeur. Il présente en outre l’avantage de disposer d’un
grand nombre de bibliothèques officiellement supportées par son éditeur lui permettant son
intégration dans un grand nombre de langages de programmation. On voit par ailleurs
apparaître l’intégration de MongoDB dans un nombre croissant de frameworks parmi les plus
populaires.
En outre, le paradigme documentaire s’avère assez simple à prendre en main et il est assez
aisé de construire des requêtes passablement complexes à l’aide de MongoDB. La
[Link]
documentation de l’API est par ailleurs d’excellente qualité et riche de nombreux exemples
concrets.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 46
COUCHDB
CouchDB est un projet de base de données orientée documents de la fondation Apache. La
premiere version stable du projet a été publiée en août 2010 après 5 ans de développement.
Développé en langage Erlang, CouchDB présente certaines fonctionnalités uniques dans les
catégories des bases de données documentaires :
propose un back office qui permet de gérer les bases de données
propose le versionning documentaire nativement
[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 47
L’API HTTP REST de CouchDB est relativement rudimentaire et ne permet pas beaucoup plus
que le modèle CRUD des bases de type clés/valeurs. En général, les développeurs CouchDB
utilisent le mécanisme de vues fourni par la base afin de réaliser des requêtes. Le système de
vue consiste en une requête MapReduce. Généralement, on considère qu’il s’agit du seul
moyen d’accès en lecture aux documents sous formes de liste. Il existe deux modes pour les
vues :
Mode document : Les vues sont stockées dans des documents spéciaux appelés
document de design. Ces vues disposent de cache et sont très rapides
Mode temporaire : La vue est interprétée et exécutée à la volée. On réserve ce mode
au développement car ses performances sont largement inférieures à celle du mode
[Link]
document
Par défaut, le langage utilisé pour le développement des vues est le Javascript. Il existe des
plugins afin de développer dans d’autres langages interprétés (PHP, Ruby, Python, …).
Exemples de vues :
Sélection des documents dont le champ type est ‘product’
Comptabilisation des documents par type
Liste des tags et du nombre d’articles associés à chacun des tags
...
Architecture
Dans sa version la plus simple, une installation de CouchDB se compose d’un unique serveur.
Le moteur de stockage embarque son propre serveur HTTP permettant aux clients d’effectuer
des requêtes via l’API :
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 48
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 49
BigCouch permet par ailleurs la distribution des étapes de mapping sur plusieurs nœuds du
cluster, ce qui permet d'accélérer les traitements.
Il est par ailleurs possible de procéder à des réplications bi-directionnelles entre instances de
[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 50
Outils de développement
Stabilité de l’API :
On peut considérer l’API de CouchDB comme stable depuis la publication de la première
distribution du projet en août 2010. Depuis cette date, on assiste uniquement à des ajouts de
nouvelles fonctionnalités.
Langages supportés :
[Link]
La construction d’une application basée sur CouchDB est très différente de ce qui est
habituellement pratiquée avec les autres SGDB. En effet, il est impossible de procéder à des
requêtes un tant soit peu complexes sans utiliser le mécanisme de vues de CouchDB. Pour des
raisons de performances, il est par ailleurs indispensable de stocker les vues dans les
documents de design de la base de données. Ces deux contraintes impliquent que les
développeurs procèdent dans un premier temps à l’écriture des vues au sein de la base avant
de les appeler en utilisant l’interface HTTP de CouchDB depuis l’application cliente.
Bien qu’il soit possible de procéder à des requêtes HTTP directes depuis les applications
clientes, il existe des bibliothèques de plus haut niveau qui simplifient le travail du
développeur dans différents langages. Le tableau ci-dessous liste quelques bibliothèques de
bonne qualité pour les principaux langages utilisés pour la programmation Web :
Langage Bibliothèques
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 51
Du fait de la conception de la base, les données ne sont pas distribuées sur plusieurs serveurs
dans l’architecture de CouchDB. Cela permet au système d’assurer une cohérence forte des
données. Cela permet même à CouchDB d’être l’un des seuls SGBD NoSQL à pouvoir
respecter les contraintes ACID.
Lors des réplications bidirectionelles, un système de gestion des conflits permet de résoudre
les cas pour lesquels un document aurait été mis à jour sur les deux serveurs. Celui-ci s’appuie
sur le fait que lors de la mise à jour d’un document les versions antérieures ne sont jamais
effacées et que les deux mises à jours concurrentes seront présentes dans deux versions
différentes. Le système choisit l’une de ces deux versions comme version courante mais
conserve l’autre.
[Link]
Transactions :
A l’image de la majorité des SGBDs NoSQL, CouchDB n’implémente pas de mécanisme de
transaction. Cependant, un certain nombre d’opérations atomiques permettent de pallier en
partie ce problème.
Outil de production
Scalabilité :
Comme indiqué dans la section traitant de l’architecture de CouchDB, une installation native
de CouchDB propose uniquement une scalabilité concernant les traitements. L’utilisation de
BigCouch permet néanmoins d’obtenir la scabilité des données et d’augmenter la distribution
des traitements sans requérir de modifier l’applicatif cible.
Tolérance à la panne :
Le système de réplication permet de mettre à disposition plusieurs nœuds CouchDB
éventuellement répartis sur plusieurs datacenters. Cela lui confère une résistance élevée à la
panne à la condition expresse que chaque base soit répliquée au moins une fois.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 52
Conclusion
[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 53
CONCLUSION
NoSQL : pour quels usages ?
Nous avons vu que NoSQL était une technologie qui avait été principalement développée
dans un contexte où la volumétrie des données rendait indispensable l’utilisation de systèmes
distribués pour assurer leur stockage et leur traitement. Il s’agit finalement du cas le plus
évident qui pourrait décider de l’utilisation d’une technologie NoSQL dans un projet.
[Link]
La plupart des moteurs NoSQL apportent par ailleurs une flexibilité plus importante que leurs
pendants relationnels en ce qui concerne la gestion de données hétérogènes. Cela entraîne
une simplification importante des modélisations qui, lorsqu’elles sont bien menées, peuvent
aboutir à des gains considérables en termes de performances pour une application. Le plus
souvent cela peut aussi s’avérer bénéfique en termes de maintenabilité sur l’application.
Dans tous les cas, une analyse poussée de l’application doit être menée. Cette analyse doit
permettre de répondre à plusieurs questions essentielles.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 54
certain sens, le mélange des technologies pour obtenir le meilleure de chacune est une
approche fondamentalement encouragée par les tenants du NoSQL.
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation
“NoSQL : les meilleures
solutions open source”
Page 55
CouchDB semble un peu en retrait par rapport à MongoDB, notamment du fait qu’il ne
s’agisse pas nativement d’une technologie distribuée. En revanche, CouchDB offre des
perspectives intéressantes en termes de design applicatif.
Cassandra est probablement le produit le moins mature des trois et celui qui sera le plus sujet
à des changements majeurs dans le futur. Il s’avère néanmoins celui qui propose le design le
plus intéressant en termes de topologies de réseaux. Sa capacité à être déployé de manière
complètement distribuée sur plusieurs datacenters en fait un choix incontournable dans les
applications qui manipulent des quantités très importantes de données.
[Link]
D’autres livres blancs Smile sont disponibles en ligne, en libre téléchargement, sur
[Link]/[Link]
Edition Octobre 2011 © Copyright Smile – Open Source Solutions – Toute reproduction interdite sans autorisation