no sql - olivier mallassi - september 2010

23
N(ot) o(nly) SQL Des alternatives aux bases de données relationnelles Olivier Mallassi v-0.3 (09 Septembre 2010)

Upload: jug-lausanne

Post on 25-May-2015

355 views

Category:

Documents


2 download

DESCRIPTION

No Sql - Olivier Mallassi - September 2010

TRANSCRIPT

Page 1: No Sql - Olivier Mallassi - September 2010

N(ot) o(nly) SQL Des alternatives aux bases de données relationnelles

Olivier Mallassi v-0.3 (09 Septembre 2010)

Page 2: No Sql - Olivier Mallassi - September 2010

Pour démarrer Quelques idées reçues…

  NoSQL n’est pas un remplacement des SGBDR

  NoSQL reste un domaine d’innovation…   …même s’il existe de nombreux déploiement en

production dans des systèmes hautement sollicités

  NoSQL est un écosystème riche   Le reste ne la présentation ne se veut pas exhaustive   « Le diable est dans le détail »

Page 3: No Sql - Olivier Mallassi - September 2010

Malgré tout, ces technologies sont intéressantes pour nos systèmes

  Vers plus de disponibilité

  Vers plus de souplesse dans la gestion des schémas/structures

  Vers plus d’élasticité de l’infrastructure

  Un volume croissant de données stockées

© OCTO 2010 3

Page 4: No Sql - Olivier Mallassi - September 2010

Au commencement étaient… Systèmes relationnels

Un référentiel unique de données structurées et couplées Un système centralisé Une donnée unique (structure, valeur, consistance…) pour toutes les utilisations On modélise les données puis on développe des applications

© OCTO 2010 4

Systèmes relationnels

Modélisation & normalisation de la données

Structuration forte de la donnée

Moteur et Langage SQL

Système de backup

Modèle centralisé, un

référentiel unique

Page 5: No Sql - Olivier Mallassi - September 2010

Puis vinrent…

  Des cas d’usage différents mais des enjeux communs   Performance   Disponibilité (>99,99%)   Résilience   Scalabilité horizontale

© OCTO 2010 5

• Un moteur de recherche mondial

• Développements spécifiques : BigTable + Algorithmes Map/Reduce

• Permet l’agrégation de gros volumes de données

• La boutique en ligne mondiale

• Développements spécifiques : Dynamo

• Permet d’obtenir de gros débit en écriture et d’assurer la disponibilité • Dernier incidents majeurs : 2004 • <40 minutes d’indisponibilité par an

Page 6: No Sql - Olivier Mallassi - September 2010

Qui ont imposé des « trade-offs »

  Disponibilité et Volumes de données manipulés et stockés   Réplication/partitionnement (ie. pas de backup ?)   Organisation physique des données optimisés pour les traitements (BigTable)

  Performance / débit en écriture Le « two phase commit » permet de respecter les propriétés ACID en environnement distribué

mais au détriment des temps de réponse et gère mal l’indisponibilité de systèmes de stockage   Le sharding de systèmes relationnels reste complexe

  L’élasticité et la gestion native du « fail-over » n’offre aucune garantie sur l’emplacement physique des données à un instant t   Difficile d’avoir un comportement transactionnel déterministe   Difficile de gérer des relations entre entités

© OCTO 2010 6 Source : « Towards Robust Distributed Systems » Dr. Eric A. Brewer http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf

Trade-off : « we forfeit ‘C’ and ‘I’ for availibility, graceful degradation and performance »

• Un spectre qui va de forte consistance, isolation, transactions à consistance faible, disponibilité prime, transactions optimistes • De ACID vers BASE

Page 7: No Sql - Olivier Mallassi - September 2010

Les alternatives aux systèmes relationnels ont été bâties pour assurer - La disponibilité (distribution & prise en compte du « fail-over », réplication multi-DC…) - Une faible structuration de la donnée (stockage de structures diverses, évolutivité des schémas…) - Elasticité des infrastructures (ajouts/pertes de serveur…) - Elasticité de la structure

- Performance, débit en écriture (optimisation des accès disque, stockage des données en colonnes, Master/Master…) - Manipulation de gros volume de données (Partitionnement…)

- Modélisation impossible ou difficilement exploitable dans le modèle relationnel

NoSQL : des gênes différents Des systèmes distribués de stockage de données faiblement structurées

© OCTO 2010 7

Des systèmes distribués et optimisés pour les structures de données qu’ils manipulent

 Des systèmes nativement décentralisés  Les applications sont écrites et influent la modélisation de la donnée. La donnée est stockée telle qu’utilisée par l’application (déjà vrai suivant l’utilisation que l’on fait d’un ORM)

Page 8: No Sql - Olivier Mallassi - September 2010

À l’origine du mouvement NoSQL

• Google App Engine permet de développer sur le Google Data Store • Amazon offre des services de stockage : SimpleDB, S3

Le Cloud démocratise ces solutions spécifiques hautement scalables

• LinkedIn et Voldemort, Facebook et Cassandra…

Certains acteurs « open-sourcent » leurs solutions (pas uniquement dans le domaine NoSQL)

La plupart des « grands du web » d’aujourd’hui migrent vers ces solutions

• Les graphes, les documents…

Un marché de niche permettant une modélisation plus facile des données (par rapport à la modélisation relationnelle)

Le sens de l’histoire : 40 années de suprématie des RDBMS enfin « challengée »

© OCTO 2010 8

Page 9: No Sql - Olivier Mallassi - September 2010

N(ot) o(nly) SQL un écosystème riche

© OCTO 2010

Page 10: No Sql - Olivier Mallassi - September 2010

Un foisonnement de solutions…

© OCTO 2010 10

Column Oriented Document

Graph

  Un marché « Open Source Pro » :   Les développeurs Redis rachetés par VMWare   Cassandra, MongoDB, Riak, Neo4j ont des structures pouvant assurer le support, la formation…   ..

  Un marché « As a Service »   Amazon, vmWare…

Key/Value

Page 11: No Sql - Olivier Mallassi - September 2010

…Organisées en grandes catégories basées sur la modélisation de la donnée

© OCTO 2010 11

Key/Value

Document

Column Oriented

Graph

Flat file, Géographique, XML, Object…

{attr1, …}

Page 12: No Sql - Olivier Mallassi - September 2010

Les bases « graph »

© OCTO 2010 12

• Modéliser simplement des graphes de données • Des nœuds (et leur propriétés) • Des relations entre les nœuds et des propriétés sur les relations

• Proposer un langage et un moteur de requête optimisé pour le parcours de graphes

Objectifs

• Evolutivité du schéma • Propriétés des nœuds et surtout des relations

• Mode Master/Slave • Réplication asynchrone (eventually consistent) • Les solutions tendent vers l’implémentation de fonctionnalité de partitionnement

• Respect d’ACID

A noter

• Recommandations / éléments liés (e-commerce…) • Construction de meta-datas (issues d’analyse des comportements utilisateurs, permettant de corréler des données diverses…)

• …

Cas d’utilisation

Page 13: No Sql - Olivier Mallassi - September 2010

Les bases « graph » en termes d’API

© OCTO 2010 13

Transaction tx = myDb.beginTx(); try {

Node architect = myDb.createNode(); Node smith = myDb.createNode(); smith.setProperty(« version », « 1.0 »); Relationship relation = smith.createRelationshipTo(architect, …

relatoin.setProperty…

tx.success(); } finally

tx.finish();

Neo4j

Page 14: No Sql - Olivier Mallassi - September 2010

Les espaces de stockage « Key/value »

© OCTO 2010 14

Neo Age:29 Name : Thomas Anderson …

Trinity YXpnYXplZw== YXpnYXpl Zw==

•  Assurer Disponibilité/Performances des systèmes en W/R et en TP

•  Permettre le stockage de gros volume de données

Objectifs

•  Une donnée est identifiable pour sa clé uniquement •  La valeur n’est pas nécessairement structurée •  Requêtage : put / get / delete •  Mode Master/Master •  Partitionnement suivant la clé •  Gestion fine de la consistance : en fonction de la

donnée, le niveau de réplication et de consistance que l’on souhaite

•  Suivant les outils : Versionning des structures de données

A noter

•  Traitements TP (enjeux de début en écriture, disponibilité)

•  Volumétrie de données

Cas d’usage

Page 15: No Sql - Olivier Mallassi - September 2010

Stockage « Key/Value » en termes d’API

© OCTO 2010 15

StoreClientFactory factory = new SocketStoreClientFactory(numThreads, numThreads, maxQueuedRequests, maxConnectionsPerNode, maxTotalConnections, bootstrapUrl);

try { StoreClient<String, Object> client = factory.getStoreClient("author");

Map<String, Object> authorMap = new HashMap<String, Object>(); authorMap.put("key", "key" + i); authorMap.put("firstName", "firstName" + i); authorMap.put("lastName", "lastName" + i);

client.put("key" + i, authorMap);

Voldemort

Page 16: No Sql - Olivier Mallassi - September 2010

Les espaces de stockage « Column Oriented »

© OCTO 2010 16

29 Neo Age

name Thomas Anderson

Timestamp#1

Timestamp#2

•  Permettre le stockage de gros volume de données •  Permettre l’analyse de gros volume de données •  Permettre la manipulation de colonnes uniquement •  Suivant les outils : Assurer Disponibilité/

Performances des systèmes en W/R

Objectifs

• Un modèle Key/Value où la valeur est a elle-même une représentation « Key/Value »

• Column oriented = optimisation du stockage physique de la donnée par colonne

•  Suivant les outils : un mode Master/Master

A noter

•  Business Intelligence de façon générale

Cas d’usage

Page 17: No Sql - Olivier Mallassi - September 2010

Stockage « Column-oriented » en termes d’API

© OCTO 2010 17

TTransport tr = new TSocket("192.168.216.128", 9160);

TProtocol proto = new TBinaryProtocol(tr); tr.open(); Cassandra.Client cassandraClient = new Cassandra.Client(proto);

Map<String, List<ColumnOrSuperColumn>> insertClientDataMap = new HashMap<String, List<ColumnOrSuperColumn>>(); List<ColumnOrSuperColumn> clientRowData = new ArrayList<ColumnOrSuperColumn>();

ColumnOrSuperColumn columnOrSuperColumn = new ColumnOrSuperColumn(); columnOrSuperColumn.setColumn(new Column("fullName".getBytes(UTF8),

aCustomer.getName().getBytes(UTF8), timestamp));

clientRowData.add(columnOrSuperColumn);

insertClientDataMap.put("customers", clientRowData); cassandraClient.batch_insert("myBank", aCustomer.getName(),insertClientDataMap,

ConsistencyLevel.DCQUORUM);

Cassandra

Page 18: No Sql - Olivier Mallassi - September 2010

Hadoop : « framework » Map/Reduce

Et Hbase?

  Un clone de Google Big Table   Utilise HDFS pour la réplication

  Master/Slave

© OCTO 2010 18

Hadoop Distributed File System

HBase

Hive (DSL SQL-like) Pig (DSL

JDBC Thrift …

Page 19: No Sql - Olivier Mallassi - September 2010

Les bases « Document »

© OCTO 2010 19

{« Age »: 29, « Name » : « Thomas Anderson » « knows »:[{« name »: « Trinity » …

Neo •  Stocker de la donnée structurée permettant une

interrogation plus complexe qu’un « Key/Value »

Objectifs

•  S’apparente à une « Key/Value » dont la valeur est structurée • Gestion des types des attributs (utf-8 string,

integer, date…) • Requêtage : insert, update, findBy • Rajouts possibles d’index sur les attributs de la

valeur • Requête de type find(…), comparateur (<, ==…)

• Mode Master/Slave (même si les solutions tendent à offrir des fonctionnalités de partitionnement)

•  Finalement assez proche des bases XML

A noter

•  Stockage de contenu (CMS, Blog, Mail…)

Cas d’usage

Page 20: No Sql - Olivier Mallassi - September 2010

N(ot) o(nly) SQL pour conclure…

© OCTO 2010

Page 21: No Sql - Olivier Mallassi - September 2010

Des systèmes de stockage qui repoussent les limites et changent les règles établies

•  Relâchement d’ACID & faible modélisation de la donnée •  Gestion de stale state et résolution de conflits •  Pas (peu…) de systèmes de requêtes •  La gestion de certaines problématiques remontent au niveau de l’espace applicatif (Gestion de l’intégrité transactionnelle, jointures,

filtres…)

Au niveau des développements

•  Changement de l’outilage (JMX…) •  Quid de la gestion des backups (à relativiser par la réplication sur plusieurs nœuds)

Au niveau de l’exploitation

•  Pas (peu…) de contrôles d’accès

Au niveau de la sécurité

Pas de standardisation (à la différence de SQL qui normalise les API, le protocole d’accès…)

•  Attentes en terme de reporting (ad-hoc, scheduled…) •  Partage des données entre plusieurs systèmes •  …

Quid de l’intégration de ces systèmes dans le reste du SI

© OCTO 2010 21

  Performance, débit en écriture

  Stockage et Manipulation de gros volume de données

  Disponibilité et « Design for failure »

  Elasticité des infrastructure de stockage

  Souplesse de modélisation

Page 22: No Sql - Olivier Mallassi - September 2010

Au-delà du buzz…

  NoSQL nous rappelle qu’il est important de travailler sur l’utilisation qui est faite de la donnée   Toutes les données n’ont pas besoin d’être consistantes dans tous

les contextes d’utilisation

  NoSQL parle de collaboration : stockage « polyglote »

  NoSQL parle d’alternatives et challenge 40 années de suprématie des bases relationnelles…

© OCTO 2010 22

Page 23: No Sql - Olivier Mallassi - September 2010

© OCTO 2010 23