SlideShare a Scribd company logo
Introduction
   NoSql

Présentation
pour la demi-
 journée des
 consultants

  Claude Falguière

               Octobre 2010
Des bases crées pour des besoins spécifiques

                         Google
              Amazon
                                    Indexation d'un très
 Site de commerce                     grand nombre de
    en très forte                           sites
     croissance


    Conserver                             Besoin
                       SGBD             énorme de
   disponibilité
   et fiabilité     Relationnel ?        stockage
La réponse aux problèmes de montée en charge


Issues des réseaux sociaux   Des projets Open Source

 Big Table (Google)
                               HBase
 SimpleDB (Amazon)
                               Apache Cassandra
 Voldemort (LinkedIn)
 Cassandra (Facebook)          CouchDB
Emergence en 2010               Twitter passe de
                                    MySql à
                                  Cassandra
                                                    Twitter passe
                                                   de Cassandra à
                                                       MySql
                  Facebook annonce
                      Cassandra




               Mouvement
             démarré fin 2008
Un ensemble disparate sous la bannière NoSql

  … mais des points communs


    Très utilisées par les       Orientées volumes,
 réseaux sociaux et le            scalabilité et
   micro-blogging                 disponibilité

            Pas de support des           Très souvent
           opérations                   distribuées
         couteuses type Join
              ou transactions
Démontage du SGBD
                                              Toujours
     SQL              API        API spécifique



 Relationnel      Modèle de
                  Modèle de       Structures
                  données
                   données        de données


                                 Versionning,
Transactionnel   Gestion de la
                 Gestion de la     Eventual
     ACID        concurrence
                 concurrence     Consistency


 Monolithique       Stockage
                    Stockage        Réparti
                                              Souvent
Les modèles de données



          Key-Value Store
       (Tableaux associatifs)
                                    Document
                   Structured         Store
     Column         Database
 (Dimensionnelle
        )                       Graph
Les bases Key Valeur


Des hashmaps distribuées


Ce modèle est très simple et les
implémentations sont très nombreuses
                                                       Riak
                                           Dynamo

                                         Project Voldemort
                               SimpleDB      (LinkedIn)
                               (Amazon)
                                        BigTable
                                        (Google)        Redis
Exemples Redis en ligne de commande


            set
$ ./redis-cli      mykey somevalue
OK                                         http://code.google.com/p/redis/
            get
$ ./redis-cli       mykey                  http://try.redis-db.com/
somevalue
            lpush
$ ./redis-cli          mylist firstvalue
OK
$ ./redis-cli lpush mylist secondvalue        Langage Bindings :
OK
$ ./redis-cli lpush mylist thirdvalue         C, C#, Common Lisp,
OK                                            Java, JavaScript, Lua, Tcl,
            lrange
$ ./redis-cli            mylist 0 -1          Perl, Python, Ruby, Scala,
1. thirdvalue                                 Clojure, Go, Erlang
2. secondvalue
Exemples Voldemort avec un Java binding
                             http://project-voldemort.com/


 final String bootstrapUrl = "...";
  final String bootstrapUrl = "...";
 final StoreClientFactory factory =
  final StoreClientFactory factory =
       new SocketStoreClientFactory(
        new SocketStoreClientFactory(
            new ClientConfig().setBootstrapUrls(bootstrapUrl)
             new ClientConfig().setBootstrapUrls(bootstrapUrl)
       );
        );
 final StoreClient client = factory.getStoreClient("MyStore");
  final StoreClient client = factory.getStoreClient("MyStore");
 final Versioned version = client.get("key");
  final Versioned version = client.get("key");
 version.setObject("value");
 version.setObject("value");
 client.put("key", value);
 client.put("key", value);
Les bases Colonne


Aussi des sortes de hashmap.


Une ligne peut avoir un nombre quelconque      Cassandra

de “colonnes” représentées par une série de   HBase
                                               Hypertable
couples clé-valeur

Représentation plus flexible des données
attachées à une entité (Sparse data)
Exemples Cassandra en Java avec Apache Thrift
  http://cassandra.apache.org/
  http://incubator.apache.org/thrift/

  // insert data
   // insert data
  ColumnPath name = new ColumnPath("Standard1", null,
  ColumnPath name = new ColumnPath("Standard1", null,
    "name".getBytes("UTF-8")), "Chris Goffinet".getBytes("UTF-8");
     "name".getBytes("UTF-8")), "Chris Goffinet".getBytes("UTF-8");
  client.insert("Keyspace1", key_user_id, name,
  client.insert("Keyspace1", key_user_id, name,
     timestamp, ConsistencyLevel.ONE);
      timestamp, ConsistencyLevel.ONE);

  ColumnPath age = new ColumnPath("Standard1", null,
  ColumnPath age = new ColumnPath("Standard1", null,
     "age".getBytes("UTF-8")), "24".getBytes("UTF-8");
      "age".getBytes("UTF-8")), "24".getBytes("UTF-8");
  client.insert("Keyspace1", key_user_id, age,
  client.insert("Keyspace1", key_user_id, age,
     timestamp, ConsistencyLevel.ONE);
      timestamp, ConsistencyLevel.ONE);
Exemples Cassandra en Java avec Apache Thrift
// read single column
 // read single column
ColumnPath path = new ColumnPath("Standard1", null,
 ColumnPath path = new ColumnPath("Standard1", null,
     "name".getBytes("UTF-8"));
      "name".getBytes("UTF-8"));
ColumnOrSuperColumn name =
 ColumnOrSuperColumn name =
   client.get("Keyspace1", key_user_id, path, ConsistencyLevel.ONE));
   client.get("Keyspace1", key_user_id, path, ConsistencyLevel.ONE));

// read entire row
 // read entire row
SlicePredicate predicate = new SlicePredicate(null,
 SlicePredicate predicate = new SlicePredicate(null,
     new SliceRange(new byte[0], new byte[0], false, 10));
     new SliceRange(new byte[0], new byte[0], false, 10));
ColumnParent parent = new ColumnParent("Standard1", null);
 ColumnParent parent = new ColumnParent("Standard1", null);
List<ColumnOrSuperColumn> results =
 List<ColumnOrSuperColumn> results =
     client.get_slice("Keyspace1", key_user_id, parent,
      client.get_slice("Keyspace1", key_user_id, parent,
          predicate, ConsistencyLevel.ONE);
          predicate, ConsistencyLevel.ONE);
for (ColumnOrSuperColumn result :: results) ...
 for (ColumnOrSuperColumn result results) ...
Les bases Document


Des hashmaps où la valeur associée à une clé est
un document soit XML soit JSON

Retrouver avec une seule clé un ensemble               MongoDB
                                                       CouchDB
d’informations structurées de manière
hiérarchique : un utilisateur, ses statuts, ses
messages
L’équivalent en relationnel impliquerait beaucoup de
jointures
Exemple CouchDB en REST/JSON
                                   http://couchdb.apache.org/



$ curl -X PUT http://couchdb:5984/tourism-db/hotel-de-la-mer 
 $ curl -X PUT http://couchdb:5984/tourism-db/hotel-de-la-mer
-d ''
 -d
{{
      "nom": "Hôtel de la Mer",
       "nom": "Hôtel de la Mer",
      "chambres": 12,
       "chambres": 12,
      "confort": ["vue sur mer", "accès wifi"]
       "confort": ["vue sur mer", "accès wifi"]
}'
 }'

{"ok":true,"id":"hotel-de-la-mer"
 {"ok":true,"id":"hotel-de-la-mer"
    ,"rev":"1-7b182be1c40992eb715f6f1eb05ba109"}
     ,"rev":"1-7b182be1c40992eb715f6f1eb05ba109"}
Exemple CouchDB en Java
                                     http://couchdb.apache.org/

// create a database object pointing to the database
 // create a database object pointing to the database
// "mycouchdb" on the local host
 // "mycouchdb" on the local host
Database db = new Database("localhost", "mycouchdb");
 Database db = new Database("localhost", "mycouchdb");

// create a hash map document with two fields
 // create a hash map document with two fields
Map<String,String> doc = new HashMap<String, String>();
 Map<String,String> doc = new HashMap<String, String>();
doc.put("firstname", "Claude");
doc.put("firstname", "Claude");
doc.put("lastname", "Falguière");
doc.put("lastname", "Falguière");

// create the document in couchdb
 // create the document in couchdb
db.createDocument(doc);
 db.createDocument(doc);
Les bases Graphes

Reposent sur la notion
  de nœuds
  et de relations entre noeuds
  et de propriétés qui leur sont attachées
Très répandues dans le traitement des données de     Neo4
réseaux sociaux (l’utilisateur, ses amis, ses
                                                   InfoGrid
messages)

En phase avec les outils du web sémantique
(RDF, OWL, SparQL)
Exemples Neo4J avec Jo4Neo                 http://neo4j.org/
                                    http://code.google.com/p/jo4neo/

 public class Person {{
 public class Person
   transient Nodeid node;
    transient Nodeid node;
   @neo String firstName;
    @neo String firstName;
   @neo Date date;
    @neo Date date;
   @neo(index=true) String screenName;
   @neo(index=true) String screenName;
    @neo Collection<Role> roles;
     @neo Collection<Role> roles;
    // ...
     // ...
 }}         ObjectGraph graph = …
            ObjectGraph graph = …
            Collection<City> cities = graph.get(City.class));
            Collection<City> cities = graph.get(City.class ;
            User user = new User();
            User user = new User();
         user = graph.find(user).where(user.screenName))
         user = graph.find(user).where(user.screenName
                             .is(screenName)).result();
                              .is(screenName .result();
Exemples Neo4J en SPARQL


  SELECT ?person
   SELECT ?person
  WHERE
   WHERE
  {{
        ?person neoj4:knows ?friend ..
         ?person neoj4:knows ?friend
        ?friend neoj4:knows ?user
         ?friend neoj4:knows ?user
        ?user neoj4:firstName "claude"
         ?user neoj4:firstName "claude"
  }}
  ORDER BY ?album
   ORDER BY ?album
En général distribuées et répliquées

Répartition par hashage ou b-Tree
Réplication au fil de l'eau
Timestamps et versionning


              Répartion
                     Partition 1
               Clé
                     Partition 2




                                   Réplication
Le CAP Theorem (Eric Brewer)

3 caractéristiques
techniques cruciales pour
les systèmes
distribués
                   Consistency
                                        On ne peut pas
                                        avoir les trois en
         Availability                   même temps
                            Partition
                            Tolerance
Eventual Consistency

La plupart des bases
NoSql sacrifient la
cohérence au
moins à court terme
              OK


                       KO

                            KO

               OK


                                 Réplication
R+W > N
                                      R=2
Le client doit
contrôler le niveau
de cohérence
              OK
 W=3                            N=4
                   OK
                        Quorum = N/2 + 1 = 3


                   OK

Paxos algorithm
Des avantages
                         Facilite les
                        traitements             Gestion de données
 Réel avantage           distribués              hiérarchiques ou
 de disponibilité                                     réseau


                       Facilite l'intégration         Elastique
                         dans les clouds


  … mais des inconvénients

     Peu de gestion          Coût du              Apprendre à bien
      de la sécurité       changement               gérer les clés
Bibliographie et crédits

Bibliographie


  Structured Storage : http://en.wikipedia.org/wiki/Structured_storage
  Cassandra : http://wiki.apache.org/cassandra/ThriftExamples



Crédits photos et cliparts
  xxx xxx




                              Cours du soir JMeter - Valtech             25
Copyright notice


●   Vous êtes libre de :                                 http://creativecommons.org/licenses/by/3.0/

    ●   Reproduire, distribuer et communiquer cette création au public
    ●   Modifier cette création
●   Selon les conditions suivantes :
    ●   Paternité. Vous devez citer le nom de l'auteur original de la
        manière indiquée par l'auteur de l'oeuvre ou le titulaire des droits
        qui vous confère cette autorisation (mais pas d'une manière qui
        suggérerait qu'ils vous soutiennent ou approuvent votre
        utilisation de l'oeuvre).
    ●   Rien dans ce contrat ne diminue ou ne restreint le droit moral de
        l'auteur ou des auteurs.

                                  Cours du soir JMeter - Valtech                                26
Contact information



            Présentation de
            Présentation de


           Claude Falguière
           Claude Falguière                                     Vous pouvez modifier cette
                                                               présentation mais vous devez
                                                                 citer les sources (auteur et
http://fr.linkedin.com/in/claudefalguiere
http://fr.linkedin.com/in/claudefalguiere                      traducteur) quelque part dans
            http:www.valtech.fr
             http:www.valtech.fr                                     votre présentation.

                                                               Par exemple incorporez cette
                                                                 diapositive au début pour
                                                                dire que votre présentation
                                                                 provient de ces sources.
                                                               Merci de faire pour le mieux.


                              Cours du soir JMeter - Valtech                              27

More Related Content

Viewers also liked

java8-patterns
java8-patternsjava8-patterns
java8-patterns
Justin Lin
 
H2O , Le machine learning sans coder ou presque - Devoxx france 2016
H2O , Le machine learning sans coder ou presque - Devoxx france 2016H2O , Le machine learning sans coder ou presque - Devoxx france 2016
H2O , Le machine learning sans coder ou presque - Devoxx france 2016
Claude Falguiere
 
google
googlegoogle
Sara zapata villa
Sara zapata villaSara zapata villa
Sara zapata villasarizflaka
 
Judith
JudithJudith
Judith
maje5918
 
L'atmosfera
L'atmosferaL'atmosfera
L'atmosfera
promo0607
 
Aprimoramento dos sistemas de telefonia do governo do estado do Espírito Sant...
Aprimoramento dos sistemas de telefonia do governo do estado do Espírito Sant...Aprimoramento dos sistemas de telefonia do governo do estado do Espírito Sant...
Aprimoramento dos sistemas de telefonia do governo do estado do Espírito Sant...
CONGESP
 
Грани Рубина
Грани РубинаГрани Рубина
Грани Рубина
Usanov Aleksey
 
Smartphones, tablets & e readers - Kortrijk
Smartphones, tablets & e readers - KortrijkSmartphones, tablets & e readers - Kortrijk
Smartphones, tablets & e readers - Kortrijk
Gene Vangampelaere
 
Õun ja vaikus
Õun ja vaikusÕun ja vaikus
Õun ja vaikusram17a
 
Common Sense for your Dollars and Cents
Common Sense for your Dollars and CentsCommon Sense for your Dollars and Cents
Common Sense for your Dollars and Cents
Katherine Swartz Hilton
 
Proser e-bülten-oct-13-03 (1)
Proser  e-bülten-oct-13-03 (1)Proser  e-bülten-oct-13-03 (1)
Proser e-bülten-oct-13-03 (1)Melih Tuzmen
 
L libres ci
L libres ciL libres ci
L libres ciAna Ruiz
 
Benelux in Perspectief
Benelux in PerspectiefBenelux in Perspectief
Benelux in Perspectief
Stipo
 
Yashoday A Bestseller For Super Success Dr. Shriniwas Kashalikar
Yashoday A Bestseller For Super Success  Dr. Shriniwas KashalikarYashoday A Bestseller For Super Success  Dr. Shriniwas Kashalikar
Yashoday A Bestseller For Super Success Dr. Shriniwas Kashalikardrsprasadi
 

Viewers also liked (19)

java8-patterns
java8-patternsjava8-patterns
java8-patterns
 
H2O , Le machine learning sans coder ou presque - Devoxx france 2016
H2O , Le machine learning sans coder ou presque - Devoxx france 2016H2O , Le machine learning sans coder ou presque - Devoxx france 2016
H2O , Le machine learning sans coder ou presque - Devoxx france 2016
 
transcript
transcripttranscript
transcript
 
google
googlegoogle
google
 
Sara zapata villa
Sara zapata villaSara zapata villa
Sara zapata villa
 
Judith
JudithJudith
Judith
 
Manual
ManualManual
Manual
 
L'atmosfera
L'atmosferaL'atmosfera
L'atmosfera
 
Aprimoramento dos sistemas de telefonia do governo do estado do Espírito Sant...
Aprimoramento dos sistemas de telefonia do governo do estado do Espírito Sant...Aprimoramento dos sistemas de telefonia do governo do estado do Espírito Sant...
Aprimoramento dos sistemas de telefonia do governo do estado do Espírito Sant...
 
Грани Рубина
Грани РубинаГрани Рубина
Грани Рубина
 
Jean day
Jean dayJean day
Jean day
 
Smartphones, tablets & e readers - Kortrijk
Smartphones, tablets & e readers - KortrijkSmartphones, tablets & e readers - Kortrijk
Smartphones, tablets & e readers - Kortrijk
 
Õun ja vaikus
Õun ja vaikusÕun ja vaikus
Õun ja vaikus
 
Common Sense for your Dollars and Cents
Common Sense for your Dollars and CentsCommon Sense for your Dollars and Cents
Common Sense for your Dollars and Cents
 
Proser e-bülten-oct-13-03 (1)
Proser  e-bülten-oct-13-03 (1)Proser  e-bülten-oct-13-03 (1)
Proser e-bülten-oct-13-03 (1)
 
L libres ci
L libres ciL libres ci
L libres ci
 
Benelux in Perspectief
Benelux in PerspectiefBenelux in Perspectief
Benelux in Perspectief
 
Yashoday A Bestseller For Super Success Dr. Shriniwas Kashalikar
Yashoday A Bestseller For Super Success  Dr. Shriniwas KashalikarYashoday A Bestseller For Super Success  Dr. Shriniwas Kashalikar
Yashoday A Bestseller For Super Success Dr. Shriniwas Kashalikar
 
Test
TestTest
Test
 

Similar to No sql pour valtech tech days

Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
zhen chen
 
Türsteher für Bohnen
Türsteher für BohnenTürsteher für Bohnen
Türsteher für Bohnen
Zambrovski Simon
 
Seminario Ruby On Rails Aula Open Source
Seminario Ruby On Rails Aula Open SourceSeminario Ruby On Rails Aula Open Source
Seminario Ruby On Rails Aula Open SourceSergio Alonso
 
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиковCodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиковCodeFest
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍
thinkinlamp
 
详细介绍什么是Java虚拟机(JVM)介绍资料
详细介绍什么是Java虚拟机(JVM)介绍资料详细介绍什么是Java虚拟机(JVM)介绍资料
详细介绍什么是Java虚拟机(JVM)介绍资料wensheng wei
 
Architecture related with Zend Framework (Japanese only)
Architecture related with Zend Framework (Japanese only)Architecture related with Zend Framework (Japanese only)
Architecture related with Zend Framework (Japanese only)
T K
 
A Picture of Cassandra in the Real World - StampedeCon 2014
A Picture of Cassandra in the Real World - StampedeCon 2014A Picture of Cassandra in the Real World - StampedeCon 2014
A Picture of Cassandra in the Real World - StampedeCon 2014
StampedeCon
 
FISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de DatacentersFISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de Datacenters
iG - Internet Group do Brasil S/A
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJS
Emerson Macedo
 
03 3-create-db-application-ado-dot-net Create Database Application with using...
03 3-create-db-application-ado-dot-net Create Database Application with using...03 3-create-db-application-ado-dot-net Create Database Application with using...
03 3-create-db-application-ado-dot-net Create Database Application with using...Warawut
 
ADO.NET Entity Framework 4
ADO.NET Entity Framework 4ADO.NET Entity Framework 4
ADO.NET Entity Framework 4Raffaele Fanizzi
 
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)Shanda innovation institute
 
Seguridad en Servicios Web
Seguridad en Servicios WebSeguridad en Servicios Web
Seguridad en Servicios Web
Hacking Bolivia
 
Entity+framework+
Entity+framework+Entity+framework+
Entity+framework+Rey zhang
 
Mix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le web
Mix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le webMix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le web
Mix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le webChristophe Lauer
 
Semantic Web Service Annotation
Semantic Web Service AnnotationSemantic Web Service Annotation
Semantic Web Service AnnotationMichele Filannino
 

Similar to No sql pour valtech tech days (20)

Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
Türsteher für Bohnen
Türsteher für BohnenTürsteher für Bohnen
Türsteher für Bohnen
 
Seminario Ruby On Rails Aula Open Source
Seminario Ruby On Rails Aula Open SourceSeminario Ruby On Rails Aula Open Source
Seminario Ruby On Rails Aula Open Source
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиковCodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍
 
详细介绍什么是Java虚拟机(JVM)介绍资料
详细介绍什么是Java虚拟机(JVM)介绍资料详细介绍什么是Java虚拟机(JVM)介绍资料
详细介绍什么是Java虚拟机(JVM)介绍资料
 
Architecture related with Zend Framework (Japanese only)
Architecture related with Zend Framework (Japanese only)Architecture related with Zend Framework (Japanese only)
Architecture related with Zend Framework (Japanese only)
 
MS Swit 2010
MS Swit 2010MS Swit 2010
MS Swit 2010
 
A Picture of Cassandra in the Real World - StampedeCon 2014
A Picture of Cassandra in the Real World - StampedeCon 2014A Picture of Cassandra in the Real World - StampedeCon 2014
A Picture of Cassandra in the Real World - StampedeCon 2014
 
FISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de DatacentersFISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de Datacenters
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJS
 
03 3-create-db-application-ado-dot-net Create Database Application with using...
03 3-create-db-application-ado-dot-net Create Database Application with using...03 3-create-db-application-ado-dot-net Create Database Application with using...
03 3-create-db-application-ado-dot-net Create Database Application with using...
 
ADO.NET Entity Framework 4
ADO.NET Entity Framework 4ADO.NET Entity Framework 4
ADO.NET Entity Framework 4
 
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
[Flash开发者交流][2010.07.24]浅析flash特效开发(陈勇)
 
Seguridad en Servicios Web
Seguridad en Servicios WebSeguridad en Servicios Web
Seguridad en Servicios Web
 
Entity+framework+
Entity+framework+Entity+framework+
Entity+framework+
 
Mix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le web
Mix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le webMix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le web
Mix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le web
 
Semantic Web Service Annotation
Semantic Web Service AnnotationSemantic Web Service Annotation
Semantic Web Service Annotation
 
Scala
ScalaScala
Scala
 

More from Claude Falguiere

Le monitoring à l'heure de DevOps et Big Data
Le monitoring à l'heure de DevOps et Big DataLe monitoring à l'heure de DevOps et Big Data
Le monitoring à l'heure de DevOps et Big Data
Claude Falguiere
 
Présentation du user group Duchess France au GDG de Nantes
Présentation du user group Duchess France au GDG de NantesPrésentation du user group Duchess France au GDG de Nantes
Présentation du user group Duchess France au GDG de Nantes
Claude Falguiere
 
Présentation Performances Montpellier
Présentation Performances Montpellier Présentation Performances Montpellier
Présentation Performances Montpellier
Claude Falguiere
 
Performance test - YaJUG Octobre 2012
Performance test - YaJUG Octobre 2012Performance test - YaJUG Octobre 2012
Performance test - YaJUG Octobre 2012
Claude Falguiere
 
La marmite Intro session NoSQL
La marmite Intro session NoSQLLa marmite Intro session NoSQL
La marmite Intro session NoSQL
Claude Falguiere
 
Analyse de données avec Incanter
Analyse de données avec IncanterAnalyse de données avec Incanter
Analyse de données avec Incanter
Claude Falguiere
 
Analyse de données avec Incanter
Analyse de données avec IncanterAnalyse de données avec Incanter
Analyse de données avec IncanterClaude Falguiere
 
Incanter bigdata jsc2012
Incanter bigdata jsc2012Incanter bigdata jsc2012
Incanter bigdata jsc2012
Claude Falguiere
 
Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012
Claude Falguiere
 
Diagnostic performances
Diagnostic performancesDiagnostic performances
Diagnostic performances
Claude Falguiere
 
Deploiement continu breizh camp
Deploiement continu breizh campDeploiement continu breizh camp
Deploiement continu breizh campClaude Falguiere
 
Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011
Claude Falguiere
 
Mesurer les performances avec JMeter
Mesurer les performances avec JMeterMesurer les performances avec JMeter
Mesurer les performances avec JMeter
Claude Falguiere
 
Mesurer Les Performances Avec JMeter Cours Du Soir Valtech 25 Mars 2010
Mesurer Les Performances Avec JMeter   Cours Du Soir Valtech 25 Mars 2010Mesurer Les Performances Avec JMeter   Cours Du Soir Valtech 25 Mars 2010
Mesurer Les Performances Avec JMeter Cours Du Soir Valtech 25 Mars 2010
Claude Falguiere
 

More from Claude Falguiere (16)

Le monitoring à l'heure de DevOps et Big Data
Le monitoring à l'heure de DevOps et Big DataLe monitoring à l'heure de DevOps et Big Data
Le monitoring à l'heure de DevOps et Big Data
 
Présentation du user group Duchess France au GDG de Nantes
Présentation du user group Duchess France au GDG de NantesPrésentation du user group Duchess France au GDG de Nantes
Présentation du user group Duchess France au GDG de Nantes
 
Présentation Performances Montpellier
Présentation Performances Montpellier Présentation Performances Montpellier
Présentation Performances Montpellier
 
Performance test - YaJUG Octobre 2012
Performance test - YaJUG Octobre 2012Performance test - YaJUG Octobre 2012
Performance test - YaJUG Octobre 2012
 
La marmite Intro session NoSQL
La marmite Intro session NoSQLLa marmite Intro session NoSQL
La marmite Intro session NoSQL
 
Analyse de données avec Incanter
Analyse de données avec IncanterAnalyse de données avec Incanter
Analyse de données avec Incanter
 
Analyse de données avec Incanter
Analyse de données avec IncanterAnalyse de données avec Incanter
Analyse de données avec Incanter
 
Incanter bigdata jsc2012
Incanter bigdata jsc2012Incanter bigdata jsc2012
Incanter bigdata jsc2012
 
Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012
 
Diagnostic performances
Diagnostic performancesDiagnostic performances
Diagnostic performances
 
Diagnostic performances
Diagnostic performancesDiagnostic performances
Diagnostic performances
 
Usine logicielle ios
Usine logicielle iosUsine logicielle ios
Usine logicielle ios
 
Deploiement continu breizh camp
Deploiement continu breizh campDeploiement continu breizh camp
Deploiement continu breizh camp
 
Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011
 
Mesurer les performances avec JMeter
Mesurer les performances avec JMeterMesurer les performances avec JMeter
Mesurer les performances avec JMeter
 
Mesurer Les Performances Avec JMeter Cours Du Soir Valtech 25 Mars 2010
Mesurer Les Performances Avec JMeter   Cours Du Soir Valtech 25 Mars 2010Mesurer Les Performances Avec JMeter   Cours Du Soir Valtech 25 Mars 2010
Mesurer Les Performances Avec JMeter Cours Du Soir Valtech 25 Mars 2010
 

No sql pour valtech tech days

  • 1. Introduction NoSql Présentation pour la demi- journée des consultants Claude Falguière Octobre 2010
  • 2. Des bases crées pour des besoins spécifiques Google Amazon Indexation d'un très Site de commerce grand nombre de en très forte sites croissance Conserver Besoin SGBD énorme de disponibilité et fiabilité Relationnel ? stockage
  • 3. La réponse aux problèmes de montée en charge Issues des réseaux sociaux Des projets Open Source Big Table (Google) HBase SimpleDB (Amazon) Apache Cassandra Voldemort (LinkedIn) Cassandra (Facebook) CouchDB
  • 4. Emergence en 2010 Twitter passe de MySql à Cassandra Twitter passe de Cassandra à MySql Facebook annonce Cassandra Mouvement démarré fin 2008
  • 5. Un ensemble disparate sous la bannière NoSql … mais des points communs Très utilisées par les Orientées volumes, réseaux sociaux et le scalabilité et micro-blogging disponibilité Pas de support des Très souvent opérations distribuées couteuses type Join ou transactions
  • 6. Démontage du SGBD Toujours SQL API API spécifique Relationnel Modèle de Modèle de Structures données données de données Versionning, Transactionnel Gestion de la Gestion de la Eventual ACID concurrence concurrence Consistency Monolithique Stockage Stockage Réparti Souvent
  • 7. Les modèles de données Key-Value Store (Tableaux associatifs) Document Structured Store Column Database (Dimensionnelle ) Graph
  • 8. Les bases Key Valeur Des hashmaps distribuées Ce modèle est très simple et les implémentations sont très nombreuses Riak Dynamo Project Voldemort SimpleDB (LinkedIn) (Amazon) BigTable (Google) Redis
  • 9. Exemples Redis en ligne de commande set $ ./redis-cli mykey somevalue OK http://code.google.com/p/redis/ get $ ./redis-cli mykey http://try.redis-db.com/ somevalue lpush $ ./redis-cli mylist firstvalue OK $ ./redis-cli lpush mylist secondvalue Langage Bindings : OK $ ./redis-cli lpush mylist thirdvalue C, C#, Common Lisp, OK Java, JavaScript, Lua, Tcl, lrange $ ./redis-cli mylist 0 -1 Perl, Python, Ruby, Scala, 1. thirdvalue Clojure, Go, Erlang 2. secondvalue
  • 10. Exemples Voldemort avec un Java binding http://project-voldemort.com/ final String bootstrapUrl = "..."; final String bootstrapUrl = "..."; final StoreClientFactory factory = final StoreClientFactory factory = new SocketStoreClientFactory( new SocketStoreClientFactory( new ClientConfig().setBootstrapUrls(bootstrapUrl) new ClientConfig().setBootstrapUrls(bootstrapUrl) ); ); final StoreClient client = factory.getStoreClient("MyStore"); final StoreClient client = factory.getStoreClient("MyStore"); final Versioned version = client.get("key"); final Versioned version = client.get("key"); version.setObject("value"); version.setObject("value"); client.put("key", value); client.put("key", value);
  • 11. Les bases Colonne Aussi des sortes de hashmap. Une ligne peut avoir un nombre quelconque Cassandra de “colonnes” représentées par une série de HBase Hypertable couples clé-valeur Représentation plus flexible des données attachées à une entité (Sparse data)
  • 12. Exemples Cassandra en Java avec Apache Thrift http://cassandra.apache.org/ http://incubator.apache.org/thrift/ // insert data // insert data ColumnPath name = new ColumnPath("Standard1", null, ColumnPath name = new ColumnPath("Standard1", null, "name".getBytes("UTF-8")), "Chris Goffinet".getBytes("UTF-8"); "name".getBytes("UTF-8")), "Chris Goffinet".getBytes("UTF-8"); client.insert("Keyspace1", key_user_id, name, client.insert("Keyspace1", key_user_id, name, timestamp, ConsistencyLevel.ONE); timestamp, ConsistencyLevel.ONE); ColumnPath age = new ColumnPath("Standard1", null, ColumnPath age = new ColumnPath("Standard1", null, "age".getBytes("UTF-8")), "24".getBytes("UTF-8"); "age".getBytes("UTF-8")), "24".getBytes("UTF-8"); client.insert("Keyspace1", key_user_id, age, client.insert("Keyspace1", key_user_id, age, timestamp, ConsistencyLevel.ONE); timestamp, ConsistencyLevel.ONE);
  • 13. Exemples Cassandra en Java avec Apache Thrift // read single column // read single column ColumnPath path = new ColumnPath("Standard1", null, ColumnPath path = new ColumnPath("Standard1", null, "name".getBytes("UTF-8")); "name".getBytes("UTF-8")); ColumnOrSuperColumn name = ColumnOrSuperColumn name = client.get("Keyspace1", key_user_id, path, ConsistencyLevel.ONE)); client.get("Keyspace1", key_user_id, path, ConsistencyLevel.ONE)); // read entire row // read entire row SlicePredicate predicate = new SlicePredicate(null, SlicePredicate predicate = new SlicePredicate(null, new SliceRange(new byte[0], new byte[0], false, 10)); new SliceRange(new byte[0], new byte[0], false, 10)); ColumnParent parent = new ColumnParent("Standard1", null); ColumnParent parent = new ColumnParent("Standard1", null); List<ColumnOrSuperColumn> results = List<ColumnOrSuperColumn> results = client.get_slice("Keyspace1", key_user_id, parent, client.get_slice("Keyspace1", key_user_id, parent, predicate, ConsistencyLevel.ONE); predicate, ConsistencyLevel.ONE); for (ColumnOrSuperColumn result :: results) ... for (ColumnOrSuperColumn result results) ...
  • 14. Les bases Document Des hashmaps où la valeur associée à une clé est un document soit XML soit JSON Retrouver avec une seule clé un ensemble MongoDB CouchDB d’informations structurées de manière hiérarchique : un utilisateur, ses statuts, ses messages L’équivalent en relationnel impliquerait beaucoup de jointures
  • 15. Exemple CouchDB en REST/JSON http://couchdb.apache.org/ $ curl -X PUT http://couchdb:5984/tourism-db/hotel-de-la-mer $ curl -X PUT http://couchdb:5984/tourism-db/hotel-de-la-mer -d '' -d {{ "nom": "Hôtel de la Mer", "nom": "Hôtel de la Mer", "chambres": 12, "chambres": 12, "confort": ["vue sur mer", "accès wifi"] "confort": ["vue sur mer", "accès wifi"] }' }' {"ok":true,"id":"hotel-de-la-mer" {"ok":true,"id":"hotel-de-la-mer" ,"rev":"1-7b182be1c40992eb715f6f1eb05ba109"} ,"rev":"1-7b182be1c40992eb715f6f1eb05ba109"}
  • 16. Exemple CouchDB en Java http://couchdb.apache.org/ // create a database object pointing to the database // create a database object pointing to the database // "mycouchdb" on the local host // "mycouchdb" on the local host Database db = new Database("localhost", "mycouchdb"); Database db = new Database("localhost", "mycouchdb"); // create a hash map document with two fields // create a hash map document with two fields Map<String,String> doc = new HashMap<String, String>(); Map<String,String> doc = new HashMap<String, String>(); doc.put("firstname", "Claude"); doc.put("firstname", "Claude"); doc.put("lastname", "Falguière"); doc.put("lastname", "Falguière"); // create the document in couchdb // create the document in couchdb db.createDocument(doc); db.createDocument(doc);
  • 17. Les bases Graphes Reposent sur la notion de nœuds et de relations entre noeuds et de propriétés qui leur sont attachées Très répandues dans le traitement des données de Neo4 réseaux sociaux (l’utilisateur, ses amis, ses InfoGrid messages) En phase avec les outils du web sémantique (RDF, OWL, SparQL)
  • 18. Exemples Neo4J avec Jo4Neo http://neo4j.org/ http://code.google.com/p/jo4neo/ public class Person {{ public class Person transient Nodeid node; transient Nodeid node; @neo String firstName; @neo String firstName; @neo Date date; @neo Date date; @neo(index=true) String screenName; @neo(index=true) String screenName; @neo Collection<Role> roles; @neo Collection<Role> roles; // ... // ... }} ObjectGraph graph = … ObjectGraph graph = … Collection<City> cities = graph.get(City.class)); Collection<City> cities = graph.get(City.class ; User user = new User(); User user = new User(); user = graph.find(user).where(user.screenName)) user = graph.find(user).where(user.screenName .is(screenName)).result(); .is(screenName .result();
  • 19. Exemples Neo4J en SPARQL SELECT ?person SELECT ?person WHERE WHERE {{ ?person neoj4:knows ?friend .. ?person neoj4:knows ?friend ?friend neoj4:knows ?user ?friend neoj4:knows ?user ?user neoj4:firstName "claude" ?user neoj4:firstName "claude" }} ORDER BY ?album ORDER BY ?album
  • 20. En général distribuées et répliquées Répartition par hashage ou b-Tree Réplication au fil de l'eau Timestamps et versionning Répartion Partition 1 Clé Partition 2 Réplication
  • 21. Le CAP Theorem (Eric Brewer) 3 caractéristiques techniques cruciales pour les systèmes distribués Consistency On ne peut pas avoir les trois en Availability même temps Partition Tolerance
  • 22. Eventual Consistency La plupart des bases NoSql sacrifient la cohérence au moins à court terme OK KO KO OK Réplication
  • 23. R+W > N R=2 Le client doit contrôler le niveau de cohérence OK W=3 N=4 OK Quorum = N/2 + 1 = 3 OK Paxos algorithm
  • 24. Des avantages Facilite les traitements Gestion de données Réel avantage distribués hiérarchiques ou de disponibilité réseau Facilite l'intégration Elastique dans les clouds … mais des inconvénients Peu de gestion Coût du Apprendre à bien de la sécurité changement gérer les clés
  • 25. Bibliographie et crédits Bibliographie Structured Storage : http://en.wikipedia.org/wiki/Structured_storage Cassandra : http://wiki.apache.org/cassandra/ThriftExamples Crédits photos et cliparts xxx xxx Cours du soir JMeter - Valtech 25
  • 26. Copyright notice ● Vous êtes libre de : http://creativecommons.org/licenses/by/3.0/ ● Reproduire, distribuer et communiquer cette création au public ● Modifier cette création ● Selon les conditions suivantes : ● Paternité. Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'oeuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'oeuvre). ● Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs. Cours du soir JMeter - Valtech 26
  • 27. Contact information Présentation de Présentation de Claude Falguière Claude Falguière Vous pouvez modifier cette présentation mais vous devez citer les sources (auteur et http://fr.linkedin.com/in/claudefalguiere http://fr.linkedin.com/in/claudefalguiere traducteur) quelque part dans http:www.valtech.fr http:www.valtech.fr votre présentation. Par exemple incorporez cette diapositive au début pour dire que votre présentation provient de ces sources. Merci de faire pour le mieux. Cours du soir JMeter - Valtech 27