Difference between revisions of "EA2014-NoSQL"

From air
Jump to navigation Jump to search
Line 75: Line 75:
   
 
==Orienté-document==
 
==Orienté-document==
Dans cette base, un élément est un ’document’ (sous forme de JSON) identifié par une clé unique. Un document peut avoir plusieurs champs JSON récursive comme valeurs.
+
Dans cette base, un élément est un ’document’ (sous forme de JSON) identifié par une clé unique. Un document peut avoir plusieurs champs JSON récursive comme valeurs. On peut même avoir des references(liens) entre différents champs pour avoir un JOIN limité.
   
 
[[File:Doc-based.png|center]]
 
[[File:Doc-based.png|center]]

Revision as of 23:04, 12 November 2014

http://fr.slideshare.net/larsga/nosql-databases-the-cap-theorem-and-the-theory-of-relativity

Introduction noSQL

Rappel sur les bases relationnels

Les bases de donnée dit relationnelle stocke les données en utilisant un schéma relationel. Comme son nom indique, le contenu d'un base sont reliés entre eux par des opérations d'algèbre relationnelles par exemple JOIN, IN, AND etc et ainsi obtenu par moyen de ces derniers. Chaque relation dans une base relationelle s'appelle une table et c'est une matrice qui contient un ensemble de groupes de valeurs séparé par des colonnes. C'est une structure très rigide et très restrictif aux évolutions des données.

Le plus connu de ce type de base est mySQL.


Problèmatiques

Depuis l'explosion des grandes applications web comme Google, Amazon, Facebook et eBay, on a constaté une croissance exponentielle au niveau de la taille des données à stocker et à traiter pour le bon fonctionnement de leurs systèmes. Les utilisateur d'une nouvelle application peut peut croître de 0 à quelques millions dans une seule journée. L'utilisation d'une site web peut exploser pendant une période d'affluence forte (par exemple :eBay pendant St Valentin).

On commence à sentir les limitations des bases de données relationnelle pour délivrer un accès plus rapide et un traitement plus performant. La scalabilité verticale ne tient plus dans le monde de BigData et il faut chercher une autre solution car ce modèle ACID ne passe jamais à une telle échelle. On remarque également que les données sur l'internet actuellement sont très variées et n'a pas beaucoup de relations spécifique entre eux pour faire fonctionner une application.

Big data nosql.png

Concept de noSQL

noSQL (not only SQL) est un ensemble de concepts pour modéliser et stocker les données qui s'oppose au modèle relationel, en suivant un schéma plus flexible(schemaless). Au lieu d'utiliser les tables, une bases noSQL prend les données à stocker, les affecte chacun une clé hash unique, et puis les éparpiller sur la base de données. C'est grâce à ces clés hash que les données peut être récuperées efficacement. L'avantage de "schemaless" dans noSQL c'est qu'on peut stocker tous ce qu'on veut dans notre application sans se soucier des évolutions plus tard dans le devéloppement de l'application.

En plus, toutes les bases noSQL sont conçues en tant que systèmes distribués pour permettre une scalabilité horizontale, c'est-à-dire pour répondre à l'augmentation de notre base, il suffit d'ajouter plus de noeuds/serveurs à côté. Au terme de performance, noSQL supporte à priori les requête distribuées(Distributed query support) ou chaque noeud est capable de répondre aux requête des clients, et cela diminue considérablement le charge du système. Il noter que ceci est un trade-off avec les propriétés ACID de la base relationnel.

Théoreme de Brewer

Dans le monde des systèmes distribués, le théoreme de Brewer(connu aussi sous le nom théoreme de CAP) dit qu'il est impossible d'avoir simultanément la garantie des ces 3 propriétés :

  • Consistency(cohérence) - Chaque noeud/serveur voir les même données au même moment
  • Availability(disponibilité) - Toutes les requêtes reçoivent use réponse en temps fini
  • Partition tolerance(résistance au morcellement) - Apart d'une coupure totale, le système fonctionnement(répondre correctement) même s'il y a des partitionnement généré par des pannes sur un ou plusieur noeuds.

Les architectures noSQL sont distribué par nature et donc ce théoreme s'applique.

Pendant la conception d'une base noSQL, il faut bien choisir 2 parmi ces 3 propriétés qu'on veut et ensuite regarder parmi les marques de noSQL sur le marché lesquelles garanties ces 2 propriétés. (Deux marques noSQL de même type ne garantissent pas forcéments les mêmes propriétés CAP).


Comparaison des marques noSQL en rapport avec les 3 propiétés CAP


Heureusement dans la plupart des cas, c'est les deux dernières qui sont choisies car les données EVENTUELLEMENT cohérente sont suffisante pour notre applications. Le fait d'avoir une donées qui est FORTEMENT cohérente dans un délai de quelques secondes (ou même millisecondes) nous semble moins important que ne pas avoir de résultat du tout.

Sharding

Dans les bases de données distribués comme noSQL, sharding décrire un ensemble de techniques qui découpe une base de données entière en plusieurs shards(tranches/noeuds/serveurs). Imaginons une vitre qui représente une base de données et on la casse en plusieurs morceaux, chaque morceaux contient les données qui ne se trouvent pas dans les autres morceaux (pas de réplication).

Chez les grands applications web qui se charge du stockage de de l'analyse d'énormes quantité de données, il n'est plus possible de tout mettre sur un serveur unique. Une machine quel que soit sa puissance immense n'est pas suffisant pour indexer tout l'internet.

Une bases de données peut être "shardé" horizontalement ou verticalement. La difference c'est que le sharding vertical stocke une ou plusieurs tables dans un noeud et le sharding horizontal stocke des éléments unitaire obtenu à partir des tables. Dans noSQL le dernier est bien sûr plus préféré pour une scalabilité horizontale.

Types de sharding.png


Il y a plusieurs techniques pour 'sharder' une base de données, par exemple :

  • MongoDB utilise plusieurs serveurs d'indexe(config servers) pour repérer les données dans un nombre de shards, ensuite redirige les requêtes vers les shards qui contiennet les données demandés.
Mongo sharding.png
  • CassandraDB utilise un grid de serveurs ou chaque serveur gère un certain nombre de données borné par une intervalle dehash(random hash distribution). Si un shard reçoit une requête pour une intervalle de hash qui n'existe pas localement ou la fin de l'intervalle ne se situe pas localement, il retransfere la requête vers un autre shard dans le réseau.
Cassandra sharding.png

Les 4 grands types de noSQL

Il existe actuellement 4 grands types de noSQL :

  • Clé-valeur
  • Orienté-document
  • Orienté-colonne
  • Orienté-graphe

Clé-valeur

Dans cette base, les éléments sont des couples avec une clé unique et une seule valeur chacun, tout simplement. L’accès à ce type de bases est généralement très rapide grâce au fait que les données sont stockées dans la mémoire vive au lieu de disque. Ce modèle est le plus populaire grâce au constat que les applications présentent nombreux accès à la base de données qui ne sont que des simples lectures ou écritures.


Key-value.png


Example de marque : Memcached, Redis, Amazon DynamoDB

Orienté-document

Dans cette base, un élément est un ’document’ (sous forme de JSON) identifié par une clé unique. Un document peut avoir plusieurs champs JSON récursive comme valeurs. On peut même avoir des references(liens) entre différents champs pour avoir un JOIN limité.

Doc-based.png

Exemple de marque : MongoDB, CouchDB

Orienté-colonne

Column-based.png


Exemple de marque : Cassandra, HBase de Google

Orienté-graphe

Graph-based.png


Exemple de marque : Neo4j, FlockDB de Twitter, GraphDB

Les marques de noSQL sur le marché

http://air.imag.fr/index.php?title=EA2012-NoSQL&action=edit http://davidmasclet.gisgraphy.com/post/2010/06/09/10-minutes-pour-comprendre...NoSQL http://blog.neoxia.com/nosql-5-minutes-pour-comprendre/