noSQL

3 432 vues

Publié le

Introduction aux bases noSQL

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
3 432
Sur SlideShare
0
Issues des intégrations
0
Intégrations
184
Actions
Partages
0
Téléchargements
151
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

noSQL

  1. 1. PrezFlash :: NoSQL<br />Jérôme Mainaud<br />19 juillet2011<br />1<br />1<br />
  2. 2. « NoSQL is like sex for teenagers: everybody is talking about it but few have actually gone for it. »<br />Emmanuel Bernard — 2011<br />
  3. 3. SQL<br />Il était une fois<br />
  4. 4. Modèle de données relationnel<br />Panier<br />PAN_ID<br />CLI_ID<br />DATE<br />MONTANT_TOTAL<br />TVA<br />Client<br />CLI_ID<br />NOM<br />ADRESSE<br />CLI_ID<br />PAN_ID<br />Article<br />PAN_ID<br />CMD_ID<br />QUANTITE<br />PRIX_UNITAIRE<br />
  5. 5. SQL<br />Un langage de requête plus ou moins normé<br />Tout information est décrite par des listes de n-uplets<br />Opérations puissante<br />Sélection (where)<br />Projection (select)<br />Produit cartésien (join)<br />Union<br />Intersection<br />Différence<br />
  6. 6. Transactions ACID<br />
  7. 7. Marché mature<br />Utilisé depuis des dizaines d’années<br />De nombreux fournisseurs et de nombreux outils<br />Oracle<br />SQL Server<br />Mysql<br />Postgresql<br />MariaDB (clone de Mysql)<br />MS Access<br />
  8. 8. Bases de données relationnelles<br />Utilisé<br />mais pas<br />choisi<br />
  9. 9. Mise en œuvre d’un SGBD-R<br />Base de données<br />Serveur Applicatif<br />HTTP<br />JDBC<br />
  10. 10. Mise en œuvre d’un SGBD-R<br />Serveurs Applicatifs<br />Base de données<br />JDBC<br />HTTP<br />
  11. 11. Mise en œuvre d’un SGBD-R<br />Base de données<br />Serveurs Applicatifs<br />HTTP<br />JDBC<br />
  12. 12. Mise en œuvre d’un SGBD-R<br />Serveurs Applicatifs<br />Base de données<br />JDBC<br />HTTP<br />
  13. 13. Montée en charge difficile<br />Les règles d’intégrité compliquent la montée horizontale<br />Montée en charge verticale<br />Coût non linéaire<br />Atteint une limite<br />Point unique de défaillance<br />
  14. 14. Coût des transactions ACID<br />La lecture est éparpillée<br />Lecture d’un panier de N articles<br />2 requêtes<br />2 IO pour lire le panier<br />N+1 IO pour les articles<br />L’écriture est lente<br />IO synchronisés<br />La durée d’une requête est difficile à prévoir<br />Select * fromtwhere id = ?<br />Select * fromtwhere date < (select max(date) fromot)<br />
  15. 15. Le modèle Entité Relation peu exploité<br />Le modèle Entité-Relation est souvent peu exploité<br />Utilisation du CRUD<br />Utilisation de caches <br />Memcache<br />Ehcache<br />Correspondance ORM <br />C’est le modèle objet qui est privilégié<br />
  16. 16. Not oNLY SQL<br />Repenser les bases de données<br />
  17. 17. Montée en charge linéaire<br />Deux critères<br />Volume des données<br />Nombre de requêtes<br />Twitter<br />Janvier 2010 : 50 M/j<br />Juin 2011 : 200 M/j<br />Le coût doit augmenter linéairement<br />
  18. 18. Performances — temps d’accès<br />Il est plus rapide d’interroger une autre machine que de lire sur le disque local <br />
  19. 19. Performances prédictibles<br />La performance des opérations doit être prédictible<br />Amazon: <br />Perte de 1 % de chiffre d’affaire si le temps d’affichage des pages augmente de 0,1 s<br />Plan qualité interne : Temps de réponse doit être < 300 ms pour 99,9 % des requêtes pour un pic de 500 requêtes par secondes<br />Google pénalise les sites dont les pages s’affichent en plus de 1,5 s<br />
  20. 20. Prise en compte des pannes<br />La panne est la règle<br />Amazon:<br />Un datacenter de 100 000 disques <br />entre 6 000 et 10 000 disques en panne par an <br />(25 disques par jour)<br />Les sources de panne sont nombreuses<br />Matériel serveur (disque)<br />Matériel réseau<br />Alimentation électrique<br />Anomalies logicielles<br />Mises à jour des logiciels et des OS.<br />
  21. 21. CAP<br />
  22. 22. Théorème CAP<br />« You can have atmosttwo of theseproperties for anysharded-data system. »<br />Eric A. Brewer— 19 juillet 2000<br />
  23. 23. Théorème CAP<br />Bases distribuées<br />Verrous distribués<br />Verrou pessimiste<br />La partition minoritaire est indisponible<br />Oracle RAC<br />LDAP<br />Commit à 2 phases<br />Cache validation<br />DNS<br />Cache Web<br />Expiration<br />Résolution de conflit<br />Verrou optimiste<br />
  24. 24. Nœud 1<br />Nœud 2<br />Version 1<br />Version 1<br />Client A<br />Client B<br />Théorème CAP — Démonstration par l’exemple<br />
  25. 25. Nœud 1<br />Nœud 2<br />MAJ 1  2<br />Version 1<br />Version 1<br />Client A<br />Client B<br />Théorème CAP — Démonstration par l’exemple<br />
  26. 26. Nœud 1<br />Nœud 2<br />Version 2<br />Version 1<br />Client A<br />Client B<br />MAJ 1  2<br />Théorème CAP — Démonstration par l’exemple<br />
  27. 27. Nœud 1<br />Nœud 2<br />Version 2<br />Version 2<br />Client A<br />Client B<br />Théorème CAP — Démonstration par l’exemple<br />Lit version 2<br />
  28. 28. Nœud 1<br />Nœud 2<br />MAJ 1  2<br />Version 1<br />Version 1<br />Client A<br />Client B<br />Théorème CAP — Démonstration par l’exemple<br />
  29. 29. Nœud 1<br />Nœud 2<br />Version 2<br />Version 1<br />Client A<br />Client B<br />MAJ 1  2<br />Théorème CAP — Démonstration par l’exemple<br />Perte du message<br />
  30. 30. Théorème CAP — Démonstration par l’exemple<br />
  31. 31. Le choix d’Amazon<br />Lors qu’un client clique <br />sur le bouton « acheter »<br />Faut-il ? <br />
  32. 32. Cohérence à terme<br />Continuum<br />
  33. 33. Cohérence par Quorum<br />V1<br />V2<br />V1<br />Client A<br />N réplicas<br />V1<br />V1<br />Client B<br />V1<br />
  34. 34. Cohérence par Quorum<br />Le client attend E OK <br />pour valider l’écriture<br />V2<br />OK<br />V2<br />Client A<br />OK<br />N réplicas<br />V2<br />OK<br />V?<br />Client B<br />V?<br />
  35. 35. Cohérence par Quorum<br />Le client B lit <br />L valeurs<br />V2<br />V2<br />Client A<br />N réplicas<br />V2<br />V?<br />Client B<br />V?<br />Si E + L > N la lecture est cohérente avec l’écriture<br />
  36. 36. Architecture décentralisée<br />A,B,C<br />W,X,Y,Z<br />Client A<br />D,E,F<br />GOSSIP<br />T,U,V<br />G,H,I<br />J,K,L<br />P,Q,R,S<br />Client B<br />M,N,O<br />
  37. 37. Map-Reduce<br />Traiter les données<br />
  38. 38. Map-Reduce<br />Technique de traitement des données de grandes tailles<br />Acteurs réputés:<br />Google<br />Hadoop<br />CouchDB<br />MongoDB<br />Map<br />Input<br />Sort<br />Reduce<br />(C1V1)<br />(K2V2)<br />(K2[V2 V2’])<br />(K3V3)<br />Traitement local<br />Traitement global<br />
  39. 39. Modèles de données<br />Repenser les bases de données<br />
  40. 40. Entités-relation<br />Panier<br />PAN_ID<br />CLI_ID<br />DATE<br />MONTANT_TOTAL<br />TVA<br />Client<br />CLI_ID<br />NOM<br />ADRESSE<br />CLI_ID<br />PAN_ID<br />Article<br />PAN_ID<br />CMD_ID<br />QUANTITE<br />PRIX_UNITAIRE<br />
  41. 41. Entité-relation<br />SQL<br />Oracle Database<br />SQL Server (Microsoft)<br />MySQL (Oracle)<br />IBM DB2<br />PostgreSQL<br />MariaDB<br />NewSQL<br />Bases entièrement en mémoire et réparties sur plusieurs nœuds avec réplication.<br />VoltDB<br />vFabricSQLFire (Vmware) (beta)<br />
  42. 42. Clef-valeur<br />
  43. 43. Clef-valeur<br />Berkley DB (Oracle)<br />Cohérente<br />Maitre/esclave<br />Memcache<br />MemcacheDB = Memcache + BerkeleyDB<br />Membase (couchbase.org)<br />Erlang<br />Riak<br />Cohérent<br />Erlang<br />Redis (Vmware)<br />Cohérent<br />en mémoire ; écriture disque asynchrone<br />types évolués (liste et map) et opérations évoluées associées<br />Dynamo (Amazon)<br />Cohérent à terme<br />Utilisation indirecte avec les outils Amazon AWS<br />Voldemort (LinkedIn)<br />Cohérent à terme<br />Gigaspace<br />Infinityspan (RedHat, JBoss)<br />Hibernate OGM<br />
  44. 44. Bases de documents<br />{ <br /> "_id" : ObjectId("4c220a42f3924d31102bd866"), <br /> "cli_id" : ObjectId("4c220a42f3924d31102bd867"),<br /> "date" : "2011-07-19",<br /> "montant_total” : 123,<br /> "tva” : 20.16,<br /> "articles” : [ <br /> { “art_id” : ObjectId("4c220a42f3924d31102bd85b"), <br /> “qte” : 2, <br /> "pu” : 50 }, <br /> { “art_id” : ObjectId("4c220a42f3924d31102bd869"), <br /> "qte” : 1, <br /> "pu": 23 } ]<br />}<br />Collection de documents JSON<br />
  45. 45. Bases de documents<br />
  46. 46. Bases de documents<br />MongoDB<br />Cohérent<br />Bien documentée<br />Références<br />Foursquare<br />Bit.ly<br />Sourceforge<br />The New York Times<br />Github<br />Grooveshark<br />CouchDB(Apache)<br />Cohérent à terme<br />Erlang<br />Complexe<br />OrientDB<br />Java embarquable<br />Terrastore<br />Lotus Notes (IBM)<br />Cohérent à terme<br />RavenDB<br />.Net<br />
  47. 47. Bases orientées colonnes<br />Table clairsemée<br />La liste des colonnes peut changer d’une ligne à l’autre<br />
  48. 48. Bases orientées colonnes<br />Gère un très grand nombre de données<br />Ex: Cassandra<br />Max nombre colonnes : 2 000 000 000<br />Max taille clef et du nom de colonne: 64 Kio<br />Max taille valeur d’une cellule : 2 Gio<br />
  49. 49. Bases orientées colonnes<br />
  50. 50. Bases orientées colonnes<br />Bigtable (Google)<br />Cohérent<br />Utilisable via Google App Engine<br />Basée sur Google File System<br />Simple DB (Amazon)<br />Cohérent à terme<br />Option de lecture cohérente<br />Utilisable comme service AWS<br />Hbase (Apache)<br />Cohérente<br />Base historique de Hadoop<br />Créée par Yahoo!<br />Open source<br />Cassandra (Apache)<br />Cohérent à terme<br />Niveau de cohérence réglable<br />Créée par Facebook<br />Grande communauté<br />En cours d’intégration avec la suite Hadoop<br />Open source<br />
  51. 51. Graphe<br />Bases qui permettent d’étudier globalement les relations entre entités.<br />Ex: Graph social<br />
  52. 52. Graphe<br />Neo4j<br />GPL<br />Très actif<br />Bases RDF<br />Jena (HP)<br />Sesame (OpenRDF)<br />Bigdata<br />Langage de requête normé : SPARQL<br />PrezFlash<br />Web Sémantique<br />Octobre 2011<br />
  53. 53. Questions ?<br />Retrouvez nous sur le blog technique de Klee<br />http://blog.kleegroup.com/teknics<br />teKnics@kleegroup.com<br />@teKnics_Klee<br />

×