SSL 2011 : Présentation de 2 bases noSQL

1,292 views
1,214 views

Published on

Présentation au Salon Solution Linux 2011 de 2 bases de données NoSQL

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,292
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

SSL 2011 : Présentation de 2 bases noSQL

  1. 1. Hervé Leclerc – Alter Way – SSL 2011 Présentation de 2 Bases de données NoSQL
  2. 2. Type de bases Document Graph Clé / Valeur Colonne Eventuellement Consistante
  3. 3. Document terrastore thrudb SisoDb Simple Structure Oriented DbNom=“Leclerc", Addresse=“6 Rue Gambetta", Hobby=“moto".Nom="Vollong", Addresse="15 Bld X", Enfants=[{Name:« Victor",Age:10}, {Name:« Leopold", Age:8}].
  4. 4. Graph Vertexdb Dex FlockDBNœuds (entités) , propriétés, liens (d’intéractions)
  5. 5. Clé / Valeur Tokyo Tyrant GT.M scalaris RaptorDB MemcacheDB[client 1] get(1234) => {" nom":« leclerc", "email":« herve.leclerc@linkedin.com"}
  6. 6. Colonne 1,2,3; 1,Smith,Joe,40000; Smith,Jones,Johnson; 2,Jones,Mary,50000; Joe,Mary,Cathy; 3,Johnson,Cathy,44000; 40000,50000,44000;
  7. 7. Eventuellement Consistante Dynamo Dynomite (Framework) KAI
  8. 8. Focus sur 2 bases orientées Document http://www.mongodb.orghttp://www.orientechnologies.com
  9. 9. MongoDB Wikipedia : MongoDB permet de manipuler des objets structurés en BSON (JSON binaire), sans schéma prédéterminé mais en permettant dindexer nimporte quel attribut. BSON : Spécifications : http://bsonspec.org/ Les attributs peuvent être ajoutés, supprimés, modifiés et renommés à nimporte quel moment. Sharding (partition) automatique Réplication Haute disponibilité Map Reduce GidFS Support Commercial
  10. 10. Qui l’utilise ? etc
  11. 11.  D’origine Italienne Tout comme MongoDB elle est axée sur la scalabilité Annoncée pour encaisser des charges en entrée de 150 000 enreg/sec sur un notebook Dell XPS 1530 Peu d’empreintes physiques Pas d’adhérence de librairies A la fois Document et Graph ++ les relations
  12. 12. Qui l’utilise ?Hummmm…. ?
  13. 13. ComparaisonsLicence Open Source (AGPL) Open Source License Apache 2.0.Langage C++ JavaType de schéma Schema-less Schema-less Schema-full et HybridModèle de données Document (BSON) Document (JSON), Graph, Key-Value et ObjetMéthode d’interrogation JavaScript/ECMAScript, API calls, HTTP, JSON, API calls, JSON JavaScript/ECMAScript, REST, SQL, SparQLRéplication Master-Master Master- Cluster SlaveInterface Custom TCP/IP + RESTful http RESTfulTransactions ACID non Oui
  14. 14. ComparaisonsMap and reduce Oui NonUnicode Oui OuiRecherche full Text Non OuiIntégrité Base Base, ACID, MVCCTransactions Non OuiSharding Oui NonOS X Platforme X PlateformeSite www.mongodb.org www.orientechnologies.com
  15. 15. ComparaisonsConnexion à la base > connect remote:localhost/demo admin admin > connect local:${ORIENTDB_HOME}/databases/ssl2011 admin admin Connecting to database [remote:localhost/demo] with user admin...OK > use ssl2011 Switched to db ssl2011
  16. 16. ComparaisonsCréer une base > create database remote:localhost/ssl2011 admin admin local Creating database [remote:localhost/ssl2011] using the storage type [local]... Connecting to database [remote:localhost/ssl2011] with user admin...OK Database created successfully. Current database is: remote:localhost/ssl2011 > use ssl2011 Switched to db ssl2011
  17. 17. ComparaisonsAfficher les composants de la base > classes CLASSES: ----------------------------------------------+------+---------------------+-----------+ NAME | ID | CLUSTERS | RECORDS | ----------------------------------------------+------+---------------------+-----------+ Whiz | 5 | 11 | 1000 | OUser | 1 | 4 | 3 | GraphMotocycle | 16 | 22 | 2 | ----------------------------------------------+------+---------------------+-----------+ TOTAL 12518 | ---------------------------------------------------------------------------------------+ > show collections equipements system.indexes users
  18. 18. ComparaisonsRetrouver les éléments > select from OUser > select from OUser where name = admin; ---+--------+--------------------+--------------------+--------------------+-------------------- #| REC ID |STATUS |NAME |ROLES |PASSWORD ---+--------+--------------------+--------------------+--------------------+-------------------- 0| #4:0|ACTIVE |admin |[1] |8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918 ---+--------+--------------------+--------------------+--------------------+-------------------- > db.users.find(); > db.users.find({username:"user_1"}); { "date" : ISODate("2011-04-10T13:55:10.378Z"), "_id" : ObjectId("4da3083ecf2e667e1b000001"), "username" : "user_1", "password" : "password1" }
  19. 19. ComparaisonsRetrouver les éléments• select from Account where address.city.country.name = ‘France• select from Account where addresses contains (city.country.name = ‘France)• select from Profile where any() like %herve%• select from Tree where children contains ( married = true )• select from User where roles containsKey shutdown• select from Vehicle where @class = Car• select from Friend where @version > 100
  20. 20. ComparaisonsRetrouver les élémentsdb.collector.find().count()db.collector.find({"variables.var9" : {$ne:null}}).count()db.collector.find({"sensor_id" : "4d768db2b456989f3e000000", "variables.var9" : /to/i})db.collector.find({"sensor_id" : "4d768db2b456989f3e000000"}).count()db.collector.find({"sensor_id" : "4d768db2b456989f3e000000", "variables.var9" :/to/i}).count()
  21. 21. ComparaisonsInsérer des éléments > create class users_ssl2011 > insert into users_ssl2011 (username,password) values (hleclerc,test) > insert into users_ssl2011 (username,password,mail) values (hme,test,herve.leclerc@gmail.com) ---+--------+--------------------+-------------------- #| REC ID |USERNAME |PASSWORD ---+--------+--------------------+-------------------- 0| #6:0|hleclerc |test 1| #6:1|hme |test |herve.leclerc@gmail.com ---+--------+--------------------+--------------------+-------------------- > db.users_ssl2011.save( { username:"hleclerc" } ) > db.users_ssl2011.save( { username:"hl", email: "hl@gmail.com"} ) > db.users_ssl2011.find() { "_id" : ObjectId("4dc45753e74668e001d54cd1"), "username" : "hleclerc" } { "_id" : ObjectId("4dc46c07cc2193af6e31fc43"), "username" : "hleclerc", "email" : "hl@gmail.com" }
  22. 22. Comparaisonsmodifier des éléments update products set KCal = 0 where KCal is null Updated 2 record(s) in 0,008000 sec(s) update People add friends = [Herve @rid] where @rid = [Marie @rid] > db.mycollection.save(x); // updates Si ca existe insertion sinon > myColl.update( { _id: X }, { _id: X, name: "herve", age: 45 }, true );
  23. 23. ComparaisonsSupprimer des éléments delete from Profile where surname.toLowerCase() = unknown‘ delete from Profile where surname = Gates > db.things.remove({}); // Supprime tout > db.things.remove({n:1}); // removes all where n == 1 t.update( {comments.by:joe}, $unset : { age : 1} }}, false, true )
  24. 24. OrientDB : Transactions ACID db.begin();try { // code db.commit();} catch (error) { db.rollback();}
  25. 25. MongoDB : Transactions ACID MongoDB ne supporte les transactions ACID que sur les documents unitaires C’est un des reproches fait à MongoDB comparé par exemple à couchDB
  26. 26. OrientDB : Type de données complexes Gère nativement  Les collections  Les maps (clé valeur)  Les documents inclus
  27. 27. MongoDB : Type de données complexes Tout est géré dans les collections sous forme d’enregistrement json
  28. 28. OrientDB : Relations Sont des liens direct Pas de jointure relationnelles entre les tables select * from city select * from city where country.name = Italy
  29. 29. MongoDB : Relations> p = db.postings.findOne(); { "_id" : ObjectId("4b866f08234ae01d21d89604"), "author" : "jim", "title" : "Brewing Methods" }> // Plus d’info sur l’auteur> db.users.findOne( { _id : p.author } ) { "_id" : "jim", "email" : "jim@gmail.com" }
  30. 30. MongoDB vs OrientDBSELECT SUM(price) as prices, SUM(cost) as costs, prices-costs, margin/pric FROM Balance VSfunction (key, values) { var price = 0.0, cost = 0.0, margin = 0.0, marginPercent = 0.0; for (var i = 0; i < values.length; i++) { price += values[i].price; cost += values[i].cost; } margin = price - cost; marginPercent = margin / price; return { price: price, cost: cost, margin: margin, marginPercent: marginPercent };}
  31. 31. MongoDB vs OrientDB
  32. 32. MongoDB : Drivers
  33. 33. OrientDB : Drivers JAVA  Java (native) API Javascript  Javascript Driver HTTP protocol Scala C Language binding  OrientDB-C PHP  OrientDB-PHP binary protocol  Orient-odino HTTP protocol Ruby  OrientDB-JRuby au travers du driver Java .NET  .NET HTTP protocol Python  Python HTTP protocol
  34. 34. Démo

×