SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
Hervé Leclerc – Alter Way – SSL 2011



    Présentation
        de 2
  Bases de données
       NoSQL
SSL 2011 : Présentation de 2 bases noSQL
Type de bases
 Document
 Graph
 Clé / Valeur
 Colonne
 Eventuellement Consistante
Document

                                             terrastore




                                                                                    thrudb
                    SisoDb
                      Simple Structure Oriented Db




Nom=“Leclerc", Addresse=“6 Rue Gambetta", Hobby=“moto".
Nom="Vollong", Addresse="15 Bld X", Enfants=[{Name:« Victor",Age:10}, {Name:« Leopold", Age:8}].
Graph

                                                       Vertexdb
                                  Dex




                   FlockDB



Nœuds (entités) , propriétés, liens (d’intéractions)
Clé / Valeur

                 Tokyo Tyrant




                  GT.M


                scalaris
                                                                                     RaptorDB
                 MemcacheDB



[client 1] get(1234) => {" nom":« leclerc", "email":« herve.leclerc@linkedin.com"}
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;
Eventuellement Consistante



   Dynamo

                  Dynomite (Framework)



            KAI
Focus sur 2 bases orientées Document


                          http://www.mongodb.org




http://www.orientechnologies.com
MongoDB
   Wikipedia : MongoDB permet de manipuler des
    objets structurés en BSON (JSON binaire), sans
    schéma prédéterminé mais en permettant d'indexer
    n'importe quel attribut.
   BSON : Spécifications : http://bsonspec.org/
   Les attributs peuvent être ajoutés, supprimés,
    modifiés et renommés à n'importe quel moment.
   Sharding (partition) automatique
   Réplication
   Haute disponibilité
   Map Reduce
   GidFS
   Support Commercial
Qui l’utilise ?




             etc
   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
Qui l’utilise ?




Hummmm…. ?
Comparaisons
Licence                   Open Source (AGPL)        Open Source License
                                                    Apache 2.0.
Langage                   C++                       Java

Type de schéma            Schema-less               Schema-less
                                                    Schema-full et Hybrid
Modèle de données         Document (BSON)           Document (JSON), Graph,
                                                    Key-Value et Objet
Méthode d’interrogation   JavaScript/ECMAScript,    API calls, HTTP, JSON,
                          API calls, JSON           JavaScript/ECMAScript,
                                                    REST, SQL, SparQL
Réplication               Master-Master Master-     Cluster
                          Slave
Interface                 Custom TCP/IP + RESTful   http RESTful

Transactions ACID         non                       Oui
Comparaisons
Map and reduce        Oui               Non

Unicode               Oui               Oui

Recherche full Text   Non               Oui

Intégrité             Base              Base, ACID, MVCC

Transactions          Non               Oui

Sharding              Oui               Non

OS                    X Platforme       X Plateforme

Site                  www.mongodb.org   www.orientechnologies.com
Comparaisons

Connexion à 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
Comparaisons

Cré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
Comparaisons

Afficher 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
Comparaisons

Retrouver 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" }
Comparaisons

Retrouver 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
Comparaisons

Retrouver les éléments


db.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()
Comparaisons

Insé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" }
Comparaisons

modifier 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 );
Comparaisons

Supprimer 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 )
OrientDB : Transactions ACID
  db.begin();
try {
  // code
  db.commit();
} catch (error) {
  db.rollback();
}
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
OrientDB : Type de données complexes
   Gère nativement
     Les collections
     Les maps (clé valeur)
     Les documents inclus
MongoDB : Type de données complexes
   Tout est géré dans les collections sous
    forme d’enregistrement json
OrientDB : Relations
   Sont des liens direct
   Pas de jointure relationnelles entre les tables
   select * from city




   select * from city where country.name = 'Italy'
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"
   }
MongoDB vs OrientDB
SELECT SUM(price) as prices, SUM(cost) as costs, prices-costs, margin/pric
  FROM Balance
                                            VS
function (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
  };
}
MongoDB vs OrientDB
MongoDB : Drivers
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
Démo
SSL 2011 : Présentation de 2 bases noSQL

Contenu connexe

Tendances

Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQLWebinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQLMongoDB
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec JavaFrancois ANDRE
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesSOAT
 
Présentation spring data Matthieu Briend
Présentation spring data  Matthieu BriendPrésentation spring data  Matthieu Briend
Présentation spring data Matthieu BriendSOAT
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDBMongoDB
 
Room ou Realm : Quelle base de données pour vos applications Android ?
Room ou Realm : Quelle base de données pour vos applications Android ?Room ou Realm : Quelle base de données pour vos applications Android ?
Room ou Realm : Quelle base de données pour vos applications Android ?Ludovic ROLAND
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasPierre-Alban DEWITTE
 
Scrapez facilement et gratuitement
Scrapez facilement et gratuitementScrapez facilement et gratuitement
Scrapez facilement et gratuitementMadeline Pinthon
 
Guide pratique openssl sous debian
Guide pratique openssl sous debianGuide pratique openssl sous debian
Guide pratique openssl sous debianyahyaf10
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 

Tendances (17)

Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQLWebinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
 
22410 b 04
22410 b 0422410 b 04
22410 b 04
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de données
 
Présentation spring data Matthieu Briend
Présentation spring data  Matthieu BriendPrésentation spring data  Matthieu Briend
Présentation spring data Matthieu Briend
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDB
 
Room ou Realm : Quelle base de données pour vos applications Android ?
Room ou Realm : Quelle base de données pour vos applications Android ?Room ou Realm : Quelle base de données pour vos applications Android ?
Room ou Realm : Quelle base de données pour vos applications Android ?
 
L'avenir de LAMP
L'avenir de LAMPL'avenir de LAMP
L'avenir de LAMP
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pas
 
Scrapez facilement et gratuitement
Scrapez facilement et gratuitementScrapez facilement et gratuitement
Scrapez facilement et gratuitement
 
Rapport tp openssl
Rapport  tp  opensslRapport  tp  openssl
Rapport tp openssl
 
Pg jsonb format 16-9
Pg jsonb format 16-9Pg jsonb format 16-9
Pg jsonb format 16-9
 
Guide pratique openssl sous debian
Guide pratique openssl sous debianGuide pratique openssl sous debian
Guide pratique openssl sous debian
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 

Similaire à SSL 2011 : Présentation de 2 bases noSQL

Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Silicon Comté
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaMicrosoft
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Bruno Bonnin
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurMicrosoft Technet France
 
Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Aurélien Maury
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity frameworkDNG Consulting
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?GreenIvory
 
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésDigital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésNeo4j
 
Absorber les web pour constituer un corpus internet : My Web intelligence.
Absorber les web pour constituer un corpus internet : My Web intelligence.Absorber les web pour constituer un corpus internet : My Web intelligence.
Absorber les web pour constituer un corpus internet : My Web intelligence.Amar LAKEL, PhD
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Alexis Sukrieh
 

Similaire à SSL 2011 : Présentation de 2 bases noSQL (20)

Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
1 2-3-grails
1 2-3-grails1 2-3-grails
1 2-3-grails
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmedia
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL Serveur
 
Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011Grails from scratch to prod - MixIT 2011
Grails from scratch to prod - MixIT 2011
 
Cozy, a Personal PaaS
Cozy, a Personal PaaSCozy, a Personal PaaS
Cozy, a Personal PaaS
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity framework
 
Implementing a key/value store
Implementing a key/value storeImplementing a key/value store
Implementing a key/value store
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?
 
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésDigital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Absorber les web pour constituer un corpus internet : My Web intelligence.
Absorber les web pour constituer un corpus internet : My Web intelligence.Absorber les web pour constituer un corpus internet : My Web intelligence.
Absorber les web pour constituer un corpus internet : My Web intelligence.
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
Coat::Persistent at FPW2009
Coat::Persistent at FPW2009Coat::Persistent at FPW2009
Coat::Persistent at FPW2009
 

Plus de Hervé Leclerc

Octo talk : docker multi-host networking
Octo talk : docker multi-host networking Octo talk : docker multi-host networking
Octo talk : docker multi-host networking Hervé Leclerc
 
Petit DéJeuner Industrialisation 13 10 2011 Eurosites
Petit DéJeuner Industrialisation 13 10 2011 EurositesPetit DéJeuner Industrialisation 13 10 2011 Eurosites
Petit DéJeuner Industrialisation 13 10 2011 EurositesHervé Leclerc
 
Alter Way Petit Dejeuner Drupal7
Alter Way Petit Dejeuner Drupal7Alter Way Petit Dejeuner Drupal7
Alter Way Petit Dejeuner Drupal7Hervé Leclerc
 
Pizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumberPizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumberHervé Leclerc
 
Mobile Cloud Computing
Mobile Cloud ComputingMobile Cloud Computing
Mobile Cloud ComputingHervé Leclerc
 
Expertise Alterway Au Service Des Projets Drupal 0.6
Expertise Alterway Au Service Des Projets Drupal   0.6Expertise Alterway Au Service Des Projets Drupal   0.6
Expertise Alterway Au Service Des Projets Drupal 0.6Hervé Leclerc
 
Expertise Alterway Au Service Des Projets Talend
Expertise Alterway Au Service Des Projets TalendExpertise Alterway Au Service Des Projets Talend
Expertise Alterway Au Service Des Projets TalendHervé Leclerc
 

Plus de Hervé Leclerc (8)

Octo talk : docker multi-host networking
Octo talk : docker multi-host networking Octo talk : docker multi-host networking
Octo talk : docker multi-host networking
 
Petit DéJeuner Industrialisation 13 10 2011 Eurosites
Petit DéJeuner Industrialisation 13 10 2011 EurositesPetit DéJeuner Industrialisation 13 10 2011 Eurosites
Petit DéJeuner Industrialisation 13 10 2011 Eurosites
 
Alter Way Petit Dejeuner Drupal7
Alter Way Petit Dejeuner Drupal7Alter Way Petit Dejeuner Drupal7
Alter Way Petit Dejeuner Drupal7
 
Pizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumberPizza party 30-09-2011 bdd-cucumber
Pizza party 30-09-2011 bdd-cucumber
 
Ecl J2ee Igc2
Ecl J2ee Igc2Ecl J2ee Igc2
Ecl J2ee Igc2
 
Mobile Cloud Computing
Mobile Cloud ComputingMobile Cloud Computing
Mobile Cloud Computing
 
Expertise Alterway Au Service Des Projets Drupal 0.6
Expertise Alterway Au Service Des Projets Drupal   0.6Expertise Alterway Au Service Des Projets Drupal   0.6
Expertise Alterway Au Service Des Projets Drupal 0.6
 
Expertise Alterway Au Service Des Projets Talend
Expertise Alterway Au Service Des Projets TalendExpertise Alterway Au Service Des Projets Talend
Expertise Alterway Au Service Des Projets Talend
 

SSL 2011 : Présentation de 2 bases noSQL

  • 1. Hervé Leclerc – Alter Way – SSL 2011 Présentation de 2 Bases de données NoSQL
  • 3. Type de bases  Document  Graph  Clé / Valeur  Colonne  Eventuellement Consistante
  • 4. Document terrastore thrudb SisoDb Simple Structure Oriented Db Nom=“Leclerc", Addresse=“6 Rue Gambetta", Hobby=“moto". Nom="Vollong", Addresse="15 Bld X", Enfants=[{Name:« Victor",Age:10}, {Name:« Leopold", Age:8}].
  • 5. Graph Vertexdb Dex FlockDB Nœuds (entités) , propriétés, liens (d’intéractions)
  • 6. Clé / Valeur Tokyo Tyrant GT.M scalaris RaptorDB MemcacheDB [client 1] get(1234) => {" nom":« leclerc", "email":« herve.leclerc@linkedin.com"}
  • 7. 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;
  • 8. Eventuellement Consistante Dynamo Dynomite (Framework) KAI
  • 9. Focus sur 2 bases orientées Document http://www.mongodb.org http://www.orientechnologies.com
  • 10. MongoDB  Wikipedia : MongoDB permet de manipuler des objets structurés en BSON (JSON binaire), sans schéma prédéterminé mais en permettant d'indexer n'importe quel attribut.  BSON : Spécifications : http://bsonspec.org/  Les attributs peuvent être ajoutés, supprimés, modifiés et renommés à n'importe quel moment.  Sharding (partition) automatique  Réplication  Haute disponibilité  Map Reduce  GidFS  Support Commercial
  • 12. 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
  • 14. Comparaisons Licence Open Source (AGPL) Open Source License Apache 2.0. Langage C++ Java Type de schéma Schema-less Schema-less Schema-full et Hybrid Modèle de données Document (BSON) Document (JSON), Graph, Key-Value et Objet Méthode d’interrogation JavaScript/ECMAScript, API calls, HTTP, JSON, API calls, JSON JavaScript/ECMAScript, REST, SQL, SparQL Réplication Master-Master Master- Cluster Slave Interface Custom TCP/IP + RESTful http RESTful Transactions ACID non Oui
  • 15. Comparaisons Map and reduce Oui Non Unicode Oui Oui Recherche full Text Non Oui Intégrité Base Base, ACID, MVCC Transactions Non Oui Sharding Oui Non OS X Platforme X Plateforme Site www.mongodb.org www.orientechnologies.com
  • 16. Comparaisons Connexion à 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
  • 17. Comparaisons Cré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
  • 18. Comparaisons Afficher 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
  • 19. Comparaisons Retrouver 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" }
  • 20. Comparaisons Retrouver 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
  • 21. Comparaisons Retrouver les éléments db.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()
  • 22. Comparaisons Insé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" }
  • 23. Comparaisons modifier 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 );
  • 24. Comparaisons Supprimer 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 )
  • 25. OrientDB : Transactions ACID  db.begin(); try { // code db.commit(); } catch (error) { db.rollback(); }
  • 26. 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
  • 27. OrientDB : Type de données complexes  Gère nativement  Les collections  Les maps (clé valeur)  Les documents inclus
  • 28. MongoDB : Type de données complexes  Tout est géré dans les collections sous forme d’enregistrement json
  • 29. OrientDB : Relations  Sont des liens direct  Pas de jointure relationnelles entre les tables  select * from city  select * from city where country.name = 'Italy'
  • 30. 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" }
  • 31. MongoDB vs OrientDB SELECT SUM(price) as prices, SUM(cost) as costs, prices-costs, margin/pric FROM Balance VS function (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 }; }
  • 34. 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
  • 35. Démo