Vous êtes sur la page 1sur 15

Ru d i Br u c h e z

Comprendre
et mettre en uvre
NoSQL
Les bases de donnes
R. Bruchez
Consultant informatique
indpendant, Rudi
Bruchez est expert en
bases de donnes depuis
une quinzaine dannes
(certications MCDBA
et MCITP). Il assure
conseil, ralisation,
expertise et formation
pour la modlisation,
ladministration et
loptimisation des serveurs
et du code SQL, ainsi que
des services autour de SQL
Server et des solutions
NoSQL. Il est lauteur
ou coauteur de plusieurs
ouvrages franais et anglais
sur SQL Server et SQL,
dont Optimiser SQL Server
(ditions Dunod) et SQL
(ditions Pearson).
Des bases pour la performance et le Big Data
En quelques annes, le volume des donnes brasses par les entreprises a considrablement augment. manant
de sources diverses (transactions, comportements, rseaux sociaux, golocalisation...), elles sont souvent structu-
res autour dun seul point dentre, la cl, et susceptibles de crotre trs rapidement. Autant de caractristiques
qui les rendent trs difciles traiter avec des outils classiques de gestion de donnes. Par ailleurs, certains cas
dutilisation exigeant des temps daccs trs courts dent galement les capacits des moteurs transactionnels.
Cest pour rpondre ces diffrentes problmatiques que sont nes les bases de donnes NoSQL (Not Only SQL),
sous limpulsion de grands acteurs du Web comme Facebook ou Google, qui les avaient dveloppes lorigine pour
leurs besoins propres. Grce leur exibilit et leur souplesse, ces bases non relationnelles permettent en effet
de grer de gros volumes de donnes htrognes sur un ensemble de serveurs de stockage distribus, avec une
capacit de monte en charge trs leve. Elles peuvent aussi fournir des accs de paires cl-valeur en mmoire avec
une trs grande clrit. Rserves jusqu peu une minorit, elles tendent aujourdhui se poser en complment
du modle relationnel qui dominait le march depuis plus de 30 ans.
Du choix de la base NoSQL sa mise en uvre
Cet ouvrage dune grande clart dresse un panorama complet des bases de donnes NoSQL, en analysant en toute
objectivit leurs avantages et inconvnients. Dans une premire partie, il prsente les grands principes de ces bases
non relationnelles : interface avec le code client, architecture distribue, paradigme MapReduce, etc. Il dtaille
ensuite dans une deuxime partie les principales solutions existantes (Hadoop, MongoDB, Cassandra, CouchDB),
en prcisant spcicits, forces et faiblesses de chacune. Complte par une tude de cas rel, la dernire partie
du livre est consacre au dploiement concret de ces bases : dans quel cas passer au NoSQL ? quelle base adopter
selon ses besoins ? quelles donnes basculer en NoSQL ? comment mettre en place une telle base ? comment la
maintenir et superviser ses performances ?
Au sommaire
QUEST-CE QUUNE BASE DE DONNES NOSQL ? Des SGBD relationnels au NoSQL Brve histoire des SGBD Le systme
dominant : le modle relationnel dEdgar Frank Codd Lmergence du Big Data et des bases NoSQL NoSQL versus
SQL : quelles diffrences ? Les principes du relationnel en regard du NoSQL Le transactionnel et la cohrence des
donnes Les choix techniques du NoSQL Linterface avec le code client Larchitecture distribue Le paradigme
MapReduce La cohrence nale Les schmas de donnes dans les bases NoSQL schema-less Les paires cl-valeur
Bases orientes documents ou colonnes Les documents binaires PANORAMA DES PRINCIPALES BASES DE DONNES NOSQL.
Hadoop et HBase Installation et architecture CouchDB Mise en uvre MongoDB Mise en uvre et administration
Riak Mise en uvre et administration Redis Mise en uvre Cassandra Caractristiques du moteur Mise
en uvre Autres bases ElasticSearch Bases de donnes orientes graphe METTRE EN UVRE UNE BASE NOSQL.
Quand aller vers le NoSQL et quelle base choisir ? Mettre en place une solution NoSQL Architecture et modlisation
Choisir larchitecture matrielle Mettre en place la solution et importer les donnes Exemples de dveloppements
Maintenir et superviser une base NoSQL Raliser des tests de charge Supervision avec les outils Linux, les outils
intgrs ou Ganglia tude de cas : le NoSQL chez Skyrock Le dveloppement de solutions en interne Utilisation de
Redis Les applications mobiles : Smax.
C
o
d
e

d
i
t
e
u
r

:

G
1
3
5
6
0
I
S
B
N

:

9
7
8
-
2
-
2
1
2
-
1
3
5
6
0
-
2
C
o
n
c
e
p
t
i
o
n

:

N
o
r
d

C
o
m
p
o
qui sadresse cet ouvrage ?
Aux experts en bases de donnes, architectes logiciels, dveloppeurs
Aux chefs de projet qui sinterrogent sur le passage au NoSQL
NoSQL
Les bases de donnes
NoSQL
Les bases de donnes
Comprendre et mettre en uvre
DU MME AUTEUR
F. BROUARD, N. SOUQUET et C. SOUTOU. SQL Server 2012.
N13592, 2013, 600 pages. paratre.
C. SOUTOU et F. BROUARD. UML 2 pour les bases de donnes (2
e
dition).
N13413, 2012, 322 pages.
C. SOUTOU. Programmer avec MySQL (3
e
dition).
N13719, 2013, 470 pages. paratre.
R. RIMEL Mmento MySQL 5 (3
e
dition).
N13419, 2012, 14 pages.
D. SEGUY et P. GAMACHE Scurit PHP 5 et MySQL (3
e
dition).
N13339, 2011, 278 pages.
C. PIERRE DE GEYER et G. PONON Mmento PHP 5 et SQL (3
e
dition).
N13602, 2013, 14 pages. paratre.
C. SOUTOU. SQL pour Oracle (6
e
dition).
N13673, 2013, 670 pages.
R. BIZO Oracle 11g Administration.
N12899, 2011, 600 pages.
R. BIZO Oracle 11g Sauvegarde et restauration.
N12899, 2011, 432 pages.
G. BRIARD Oracle 10g sous Windows.
N11707, 2006, 846 pages.
R. BIZO Oracle 10g - Administration.
N11747, 2005, 744 pages.
R. BIZO SQL pour Oracle 10g.
N12055, 2006, 650 pages.
R. BIZO PL/SQL pour Oracle 10g.
N12056, 2006, 328 pages.
G. BRIARD Oracle9i sous Windows.
N11220, 2003, 1040 pages.
G. BRIARD Oracle9i sous Linux.
N11337, 2003, 894 pages.
B. VIDAL Applications mobiles avec Oracle.
N9251, 2001, 686 pages.
R. BIZO. Oracle9i : SQL et PL/SQL.
N11351, 2003, 468 pages.
pII_Bruchez.indd 1 08/03/13 16:26
Ru d i Br u c h e z
NoSQL
Les bases de donnes
Comprendre et mettre en uvre
En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le prsent ouvrage,
sur quelque support que ce soit, sans lautorisation de lditeur ou du Centre Franais dexploitation du droit de copie,
20, rue des Grands Augustins, 75006 Paris.
Groupe Eyrolles, 2013, ISBN : 978-2-212-13560-2
DITIONS EYROLLES
61, bd Saint-Germain
75240 Paris Cedex 05
www.editions-eyrolles.com
Copyright_Bruchez.indd 1 08/03/13 16:26
Table des matires
AVANT-PROPOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Un ouvrage impartial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
propos des exemples de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
PREMIRE PARTIE
Quest-ce quune base NoSQL ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
CHAPITRE 1
Des SGBD relationnels au NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Brve histoire des systmes de gestion de bases de donnes . . . . . . . . . . . . . . 7
Le modle hirarchique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Codasyl et Cobol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Edgard Frank Codd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Le systme dominant : le modle relationnel dEdgar Frank Codd . . . . . . . 10
Les rgles de Codd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
De OLTP OLAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Lmergence du Big Data et des bases NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . 13
La solution Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Hadoop, une implmentation de MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
BigTable, encore Google ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Linfuence dAmazon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Le mouvement NoSQL est-il une avance ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
La nbuleuse NoSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Le SGBD est un dveloppement comme un autre. . . . . . . . . . . . . . . . . . . . . . . . 18
CHAPITRE 2
NoSQL versus SQL : quelles diffrences ?. . . . . . . . . . . . . . . . . . . . . . . . . 21
Les principes du relationnel en regard du NoSQL. . . . . . . . . . . . . . . . . . . . . . 21
Le Waterfall Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
VI
Les bases de donnes NoSQL
La normalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Lalgbre relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Le dfaut dimpdance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Les NULL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Le transactionnel et la cohrence des donnes . . . . . . . . . . . . . . . . . . . . . . . . . 34
Isolation de la transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
La transaction distribue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Le thorme CAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Journalisation et durabilit de la transaction. . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Big Data et dcisionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
CHAPITRE 3
Les choix techniques du NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Linterface avec le code client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Les protocoles daccs aux donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Larchitecture distribue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
La distribution avec matre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
La distribution sans matre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Le paradigme MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Lisp et les langages fonctionnels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
La cohrence fnale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
CHAPITRE 4
Les schmas de donnes dans les bases NoSQL . . . . . . . . . . . . . . . . . 91
schema-less . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Qualifer la donne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Une approche non relationnelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Les paires cl-valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Les entrepts cl-valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Bases orientes documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Bases orientes colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Les documents binaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
VII
Table des matires
DEUXIME PARTIE
Panorama des principales
bases de donnes NoSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Prliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
CHAPITRE 5
Hadoop et HBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Hadoop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Tester lexcution dHadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
HBase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Installation en mode standalone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Mise en uvre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
CHAPITRE 6
CouchDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Caractristiques de CouchDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Mise en uvre de CouchDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Utilisation de Futon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Utilisation de lAPI REST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Utilisation de lAPI REST dans le code client . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Les fonctionnalits du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Programmation client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
CHAPITRE 7
MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Caractristiques de MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Mise en uvre de MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Linvite interactive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Programmation client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Monte en charge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
VIII
Les bases de donnes NoSQL
CHAPITRE 8
Riak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Mise en uvre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Utilisation de lAPI REST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Programmation client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Confguration du nud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
CHAPITRE 9
Redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Les types de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Mise en uvre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Confguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Utilisation de redis-cli. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Exemples dapplications clientes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Conclusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
CHAPITRE 10
Cassandra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Caractristiques du moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Modle de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Stockage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Mise en uvre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Confguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Utilisation de linvite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Gestion de la cohrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Programmation client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Nodetool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Conclusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
CHAPITRE 11
Les autres bases de donnes de la mouvance NoSQL . . . . . . . . . . . . 193
ElasticSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Mise en uvre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Les bases de donnes orientes graphes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Neo4j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
IX
Table des matires
TROISIME PARTIE
Mettre en uvre une base NoSQL . . . . . . . . . . . . . . . . . . . . . . . . 205
CHAPITRE 12
Quand aller vers le NoSQL et quelle base choisir ? . . . . . . . . . . . . . . . 207
Aller ou non vers le NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Les avantages des moteurs relationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Que doit-on stocker ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
La diffrence dapproche avec le relationnel. . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Le problme des comptences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Quels sont les besoins transactionnels? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Rsum des cas dutilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Quelle base choisir? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Conclusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
CHAPITRE 13
Mettre en place une solution NoSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Architecture et modlisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Stocker du XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Conception pilote par le domaine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
La cohrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Design patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Choisir larchitecture matrielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
valuer les besoins en mmoire de Redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
valuation des besoins disque. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Virtualisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Mettre en place la solution et importer les donnes . . . . . . . . . . . . . . . . . . . . . 236
Dploiement distribu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Outils de gestion de confguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Importer les donnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Importer du XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Exemples de dveloppements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
CHAPITRE 14
Maintenir et superviser ses bases NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . 247
Raliser des tests de charge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Cassandra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Tests gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

X
Les bases de donnes NoSQL
Supervision avec les outils Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
La commande iostat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
La commande iftop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
La commande pidstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
La commande sar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Supervision avec les outils intgrs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Cassandra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Supervision avec Ganglia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Installer Ganglia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Ajout de modules Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
CHAPITRE 15
tude de cas: le NoSQL chez Skyrock . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Le dveloppement de solutions en interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Topy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Fluxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Lutilisation de Redis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Tester la charge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Contourner les problmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Utiliser Redis pour le traitement dimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Les applications mobiles: Smax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Exemple de requtes gographiques dans MongoDB. . . . . . . . . . . . . . . . . . . . . 273
CONCLUSION
Comment se prsente le futur?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Avant-propos
Ce quon appelle le mouvement NoSQL est encore jeune en France, mme sil existe depuis
plusieurs annes aux tats-Unis. Mais il suscite dj un vif intrt et de nombreux dbats, plus
que ne lont fait les prcdents carts par rapport au modle dominant de la gestion des bases de
donnes, savoir le modle relationnel.
Il y a une dizaine dannes, la mode du XML avait dj sduit bon nombre dentreprises et de
dveloppeurs. Il est vrai que ladoption dun format ouvert de description structure de documents,
avec les outils de validation, de traitement et de transformation adquats, reprsentait un rel
progrs en matire dchange de donnes. Mais les diffrentes tentatives visant organiser un
stockage natif du XML, travers des bases de donnes comme eXist, nont jamais abouti, peut-tre
parce que les outils ont t dvelopps de faon formelle, sans rpondre un rel besoin. Cela dit,
une tendance qui se retrouve dans les moteurs NoSQL tait dj luvre : les dveloppements
les plus intressants, comme eXist justement, sont en licence libre.
Pour le NoSQL, les choses sont diffrentes. Ces moteurs non relationnels ont t souvent conus
sous limpulsion dentreprises qui souhaitaient leur mise en place, afn de rpondre leurs propres
besoins. Ils sont galement les produits de leur temps, o les machines sont moins chres et la
distribution sur plusieurs nuds est lune des solutions les plus accessibles de monte en charge.
On pourrait aussi considrer le NoSQL comme le fruit dune vieille opposition entre le dve-
loppeur, qui souhaite utiliser ses outils rapidement, de manire presque ludique, et sans aucune
contrainte, et ladministrateur, qui protge son systme et met en place des mcanismes complexes
et contraignants.
1
Dailleurs, beaucoup de dveloppeurs naiment pas les bases de donnes. Ils
sont pourtant obligs de sen servir, car linformatique manipule de linformation, laquelle est
stocke dans des systmes de gestion de bases de donnes (SGBD). Ils vivent comme une intrusion
cet lment externe, qui sintgre mal avec leur code, et qui les oblige apprendre un langage
supplmentaire, faussement facile, le SQL.
Mais le mouvement NoSQL ne peut se rsumer ce rejet du SQL : certains de ses moteurs sont
le rsultat de recherches et dexprimentations. Dautres permettent de garantir les meilleures
performances possibles en conservant un modle de donnes trs simple. Sous la bannire NoSQL,
ces outils ont ainsi des identits trs diffrentes et rpondent des besoins trs divers, allant du
temps rel au Big Data.
1. Un mouvement, nomm DevOps, essaie dailleurs de rconcilier ces deux points de vue.
2
Les bases de donnes NoSQL
Un ouvrage impartial
Cest pourquoi crire un livre sur le NoSQL dans son ensemble pourrait paratre un peu artifciel,
puisque en fn de compte, la seule composante qui runit des outils comme Cassandra, MongoDB
ou Redis, cest labandon du modle relationnel. Mais somme toute, ce nest pas quun petit point
commun. Le modle relationnel est le modle dominant depuis la fn des annes 1980, cela fait
plus de trente ans maintenant. Sloigner de ce modle comme le font les moteurs NoSQL implique
de dvelopper de nouvelles stratgies, de nouveaux algorithmes et de nouvelles pratiques pour la
gestion des donnes. Il y a donc des points communs, des fertilisations croises que nous allons
dtailler dans ce livre.
Comme beaucoup de nouvelles technologies qui rencontrent un certain succs, les moteurs NoSQL
font lobjet de dbats parfois exagrs, o les arguments manquent souvent de prcision et dobjec-
tivit. Pour exemple, voici un extrait traduit de lintroduction du livre Hbase, the Defnitive Guide
(Lars George, OReilly, 2011), o lauteur justife lutilisation de HBase plutt quun moteur
relationnel dans les cas de forte monte en charge :
La popularit de votre site augmentant, on vous demande dajouter de nouvelles fonctionna-
lits votre application, ce qui se traduit par plus de requtes vers votre base de donnes. Les
jointures SQL que vous tiez heureux dexcuter par le pass ralentissent soudainement et ne se
comportent plus de faon satisfaisante pour monter en charge. Vous devrez alors dnormaliser
votre schma. Si les choses continuent empirer, vous devrez aussi abandonner lutilisation
de procdures stockes, parce quelles deviennent trop lentes. En fn de compte, vous rduisez
le rle de votre base de donnes un espace de stockage en quelque sorte optimis pour vos
types daccs.
Votre charge continuant augmenter et de plus en plus dutilisateurs senregistrant sur votre
site, ltape logique suivante consiste prmatrialiser de temps en temps les requtes les plus
coteuses, de faon pouvoir fournir plus rapidement les donnes vos clients. Puis vous com-
mencez supprimer les index secondaires, car leur maintenance devient trop pnible et ralentit
la base de donnes. Vous fnissez par excuter des requtes qui peuvent utiliser seulement la cl
primaire, et rien dautre.
Vous avez peut-tre maintenant les yeux carquills, comme je les ai eus en lisant ce texte.
Pour lauteur, la solution pour optimiser les accs un moteur relationnel est de dnormaliser,
supprimer les jointures, bannir les procdures stockes et enlever les index. Or un moteur rela-
tionnel peut justement monter en charge grce aux optimisations apportes par la normalisation,
lindexation et les procdures stockes qui vitent des allers-retours entre le client et le serveur.
Ce genre dapproximations et de contrevrits sur le modle relationnel est assez commun dans
le monde NoSQL.
En face, lincomprhension est galement souvent constate, et le danger qui guette toute discus-
sion sur le sujet est de se transformer en une guerre dcoles, o les spcialistes et dfenseurs du
modle relationnel rejettent avec mpris le mouvement NoSQL, en ignorant les raisons du dve-
loppement et de lengouement de ces systmes qui tiennent en partie aux diffcults du relationnel.
Tout cela cre des querelles de clocher qui feront des victimes : les utilisateurs et les entreprises qui,
eux, recherchent objectivement la meilleure solution de stockage et de gestion de leurs donnes.
3
Avant-propos
Ce livre se propose donc de clarifer la situation, en comparant les deux modles, en identifant
leurs points forts et leurs faiblesses, mais aussi en essayant de dbusquer ce qui se cache derrire
les choix de conception des diffrents moteurs NoSQL. En effet, nous pensons quune vision
densemble de loffre de ces nouveaux moteurs vous permettra de vous orienter dans vos choix
de dveloppement. Bien entendu, lapproche de cet ouvrage sera galement pratique et dmons-
trative : nous vous expliquerons comment fonctionnent les moteurs NoSQL les plus populaires,
pourquoi et comment les choisir, et comment mettre le pied ltrier.
propos des exemples de code
Dans ce livre, nous allons expliquer comment manipuler des bases de donnes NoSQL, en pr-
sentant leurs interfaces, leurs invites de commande, ainsi que des exemples de code client. Pour
ces exemples, nous avons choisi dutiliser Python, principalement parce que cest un langage trs
populaire qui compte de nombreux pilotes pour les moteurs NoSQL, et parce que la clart de sa
syntaxe le rend facile lire et propice lapprentissage.
Toutes nos installations et nos exemples seront raliss sur une machine Linux, dote de la dis-
tribution Ubuntu Server 12.04 LTS. Python y fgurant par dfaut, il vous restera installer pip
(Python Package Index), lutilitaire de gestion de paquets Python, qui nous servira rcuprer
les diffrents paquets comme les pilotes pour nos moteurs. Voici la procdure dinstallation de
pip sur Ubuntu.
Installez dabord les paquets suivants laide de apt-get, le gestionnaire de paquets de Debian
et dUbuntu :
sudo apt-get install python-pip python-dev build-essential
Puis procdez la mise jour de pip :
sudo pip install --upgrade pip

Vous aimerez peut-être aussi