SlideShare ist ein Scribd-Unternehmen logo
1 von 143
Downloaden Sie, um offline zu lesen
MongoDB Mix
                     Paris - Mars 2013




jeudi 14 mars 13
Agile Developer

                                  MongoDB User

                    @karesti      MongoDB Master

                   Katia Aresti      Freelance




jeudi 14 mars 13
Faisons connaissance ...




jeudi 14 mars 13
Faisons connaissance ...

             • Avant cette soirée, je ne connaissais que lui




jeudi 14 mars 13
Faisons connaissance ...

             • Avant cette soirée, je ne connaissais que lui
             • J’en ai entendu un peu parler



jeudi 14 mars 13
Faisons connaissance ...

             • Avant cette soirée, je ne connaissais que lui
             • J’en ai entendu un peu parler
             • J’ai déjà utilisé MongoDB à la maison


jeudi 14 mars 13
Faisons connaissance ...

             • Avant cette soirée, je ne connaissais que lui
             • J’en ai entendu un peu parler
             • J’ai déjà utilisé MongoDB à la maison
             • J’utilise MongoDB chez mon client

jeudi 14 mars 13
1ème partie
                       Mongo




jeudi 14 mars 13
Mini-introduction



jeudi 14 mars 13
«MongoDB has the best features of
        key/value stores, document databases
        and relational databases in one.»

                          John Nunemaker


jeudi 14 mars 13
«MongoDB has the best features of
        key/value stores, document databases
        and relational databases in one.»

                          John Nunemaker


jeudi 14 mars 13
Orienté Document




jeudi 14 mars 13
Orienté Document
           • Pas de jointures




jeudi 14 mars 13
Orienté Document
           • Pas de jointures
           • Pas de transaction multi-documents




jeudi 14 mars 13
Orienté Document
           • Pas de jointures
           • Pas de transaction multi-documents
           • Les documents inclus et les tableaux limitent les
                   besoins de jointures




jeudi 14 mars 13
Orienté Document
           • Pas de jointures
           • Pas de transaction multi-documents
           • Les documents inclus et les tableaux limitent les
                   besoins de jointures
           • Sans schéma


jeudi 14 mars 13
Orienté Document
           • Pas de jointures
           • Pas de transaction multi-documents
           • Les documents inclus et les tableaux limitent les
                   besoins de jointures
           • Sans schéma
           • Système de requêtes très évolué
jeudi 14 mars 13
Orienté Document
           • Pas de jointures
           • Pas de transaction multi-documents
           • Les documents inclus et les tableaux limitent les
                   besoins de jointures
           • Sans schéma
           • Système de requêtes très évolué
jeudi 14 mars 13
La donnée normalisée
                                         Category
                                     • Name
                                     • Url




                                              Article
                          User       • Name
                                                                 Tag
                   • Name            • Slug             • Name
                   • Email Address   • Publish date     • Url
                                     • Text




                                        Comment
                                     • Comment
                                     • Date
                                     • Author
                                                                 ©
jeudi 14 mars 13
Une base de données document

                                              Article
                                       • Name
                                       • Slug
                                       • Publish date
                          User         • Text
                     • Name            • Author
                     • Email Address
                                           Comment[]
                                        • Comment
                                        • Date
                                        • Author

                                              Tag[]
                                        • Value

                                           Category[]
                                        • Value
                                                        ©
jeudi 14 mars 13
RDBMS             Mongo
        Table,View    ➜ Collection
        Row           ➜ Document
        Index         ➜ Index
        Join          ➜ Embedded Document
        Foreign Key   ➜ Reference
        Partition     ➜ Shard


jeudi 14 mars 13
Techniquement




jeudi 14 mars 13
Techniquement

                   • Ecrit en C++




jeudi 14 mars 13
Techniquement

                   • Ecrit en C++
                   • Portable (presque) partout !



jeudi 14 mars 13
Techniquement

                   • Ecrit en C++
                   • Portable (presque) partout !
                   • La donnée est sérialisée en BSON


jeudi 14 mars 13
Techniquement

                   • Ecrit en C++
                   • Portable (presque) partout !
                   • La donnée est sérialisée en BSON
                   • Utilisation massive de la mémoire

jeudi 14 mars 13
Haute-Disponibilité & Scalabilité




jeudi 14 mars 13
Haute-Disponibilité & Scalabilité


           • Réplication de server avec failover du master
                   automatique




jeudi 14 mars 13
Haute-Disponibilité & Scalabilité


           • Réplication de server avec failover du master
                   automatique
           • Sharding automatique



jeudi 14 mars 13
Haute-Disponibilité & Scalabilité


           • Réplication de server avec failover du master
                   automatique
           • Sharding automatique
           • Distribution des lectures sur les serveurs


jeudi 14 mars 13
Haute-Disponibilité & Scalabilité


           • Réplication de server avec failover du master
                   automatique
           • Sharding automatique
           • Distribution des lectures sur les serveurs


jeudi 14 mars 13
Haute performance




jeudi 14 mars 13
Haute performance
        • La plupart des opération sont faites en
                   mémoire.




jeudi 14 mars 13
Haute performance
        • La plupart des opération sont faites en
                   mémoire.
        • Ecriture et Lecture très rapides.



jeudi 14 mars 13
Haute performance
        • La plupart des opération sont faites en
                   mémoire.
        • Ecriture et Lecture très rapides.
        • Indexation de n'importe quel champs ou sous-
                   documents




jeudi 14 mars 13
Haute performance
        • La plupart des opération sont faites en
                   mémoire.
        • Ecriture et Lecture très rapides.
        • Indexation de n'importe quel champs ou sous-
                   documents
        • Ecritures asynchrones si besoin

jeudi 14 mars 13
Qui utilise MongoDB ?




jeudi 14 mars 13
2ème partie
                     Mongo reloaded




jeudi 14 mars 13
Il était une fois ...




jeudi 14 mars 13
Il était une fois ...




jeudi 14 mars 13
Mission




jeudi 14 mars 13
Mission

                   • Les négociations ont échoué...




jeudi 14 mars 13
Mission

                   • Les négociations ont échoué...
                   • Il faut monter une équipe...




jeudi 14 mars 13
Mission

                   • Les négociations ont échoué...
                   • Il faut monter une équipe...
                   • Proposer des services qui affichent 100k
                     points d'intérêts...




jeudi 14 mars 13
Mission

                   • Les négociations ont échoué...
                   • Il faut monter une équipe...
                   • Proposer des services qui affichent 100k
                     points d'intérêts...
                   • Et les enrichir avec une 10 de partenaires...


jeudi 14 mars 13
Mission

                   • Les négociations ont échoué...
                   • Il faut monter une équipe...
                   • Proposer des services qui affichent 100k
                     points d'intérêts...
                   • Et les enrichir avec une 10 de partenaires...
                   • ...en 2 mois...

jeudi 14 mars 13
Mission

                   • Les négociations ont échoué...
                   • Il faut monter une équipe...
                   • Proposer des services qui affichent 100k
                     points d'intérêts...
                   • Et les enrichir avec une 10 de partenaires...
                   • ...en 2 mois...

jeudi 14 mars 13
Equipe POIx

jeudi 14 mars 13
Architecture Emergente




jeudi 14 mars 13
Architecture Emergente

          • Concept des méthodes agiles.




jeudi 14 mars 13
Architecture Emergente

          • Concept des méthodes agiles.
          • Retarder au plus tard les
                   décisions d'architectures
                   lourdes, afin de décider avec
                   le plus d'éléments possibles.




jeudi 14 mars 13
Architecture Emergente

          • Concept des méthodes agiles.
          • Retarder au plus tard les
                   décisions d'architectures
                   lourdes, afin de décider avec
                   le plus d'éléments possibles.
          • N'est possible qu'en écrivant
                   du code de façon incremental.



jeudi 14 mars 13
Architecture Emergente

          • Concept des méthodes agiles.
          • Retarder au plus tard les
                   décisions d'architectures
                   lourdes, afin de décider avec
                   le plus d'éléments possibles.
          • N'est possible qu'en écrivant
                   du code de façon incremental.
          • Suite de tests unitaires et
                   fonctionnels très importantes.
jeudi 14 mars 13
Architecture Initiale


                    Services Data
                      REST

                                      ...
                           Staging
                                            XML
                                             CSV
                                            SOAP

                                     ETL
                                            REST
                                              ...

jeudi 14 mars 13
Architecture •Initiale
                                  Fort stockage




                    Services Data
                      REST

                                        ...
                             Staging
                                              XML
                                               CSV
                                              SOAP

                                       ETL
                                              REST
                                                ...

jeudi 14 mars 13
Architecture •Initiale
                                  Fort stockage

                                • Rapidité de lecture


                    Services Data
                      REST

                                          ...
                             Staging
                                                 XML
                                                  CSV
                                                 SOAP

                                         ETL
                                                 REST
                                                   ...

jeudi 14 mars 13
Architecture •Initiale
                                  Fort stockage

                                • Rapidité de lecture
                                • Recherche geospatiale

                    Services Data
                      REST

                                          ...
                             Staging
                                                 XML
                                                  CSV
                                                 SOAP

                                         ETL
                                                 REST
                                                   ...

jeudi 14 mars 13
Architecture •Initiale
                                  Fort stockage

                                • Rapidité de lecture
                                • Recherche geospatiale
                                • Recherche textuelle
                    Services Data
                      REST

                                          ...
                             Staging
                                                 XML
                                                  CSV
                                                 SOAP

                                         ETL
                                                 REST
                                                   ...

jeudi 14 mars 13
Architecture   •Initiale
                                    Fort stockage

                                  • Rapidité de lecture
                                  • Recherche geospatiale
                                  • Recherche textuelle
                    Services Data • Requêtes complexes
                       REST

                                           ...
                              Staging
                                                  XML
                                                   CSV
                                                  SOAP

                                          ETL
                                                  REST
                                                    ...

jeudi 14 mars 13
Architecture   •Initiale
                                    Fort stockage

                                  • Rapidité de lecture
                                  • Recherche geospatiale
                                  • Recherche textuelle
                    Services Data • Requêtes complexes
                      REST        • Aucune écriture
                                           ...
                              Staging
                                                  XML
                                                   CSV
                                                  SOAP

                                          ETL
                                                  REST
                                                    ...

jeudi 14 mars 13
Architecture Initiale


                    Services Data
                      REST

                                      ...
                           Staging
                                            XML
                                             CSV
                                            SOAP

                                     ETL
                                            REST
                                              ...

jeudi 14 mars 13
Architecture Initiale


                      Services Data
                        REST
       •      Très fort stockage
                                              ...
                                   Staging
                                                    XML
                                                     CSV
                                                    SOAP

                                             ETL
                                                    REST
                                                      ...

jeudi 14 mars 13
Architecture Initiale


                      Services Data
                        REST
       •      Très fort stockage

       •      Ecriture bulk
                                   Staging
                                              ...
                                                    XML
                                                     CSV
                                                    SOAP

                                             ETL
                                                    REST
                                                      ...

jeudi 14 mars 13
Architecture Initiale


                      Services Data
                        REST
       •      Très fort stockage

       •      Ecriture bulk
                                   Staging
                                              ...
       •      Requête simple
                                                    XML
                                                     CSV
                                                    SOAP

                                             ETL
                                                    REST
                                                      ...

jeudi 14 mars 13
Architecture Initiale


                      Services Data
                        REST
       •      Très fort stockage

       •      Ecriture bulk
                                    Staging
                                               ...
       •      Requête simple
                                                     XML

       •
                                                      CSV
              Historise la donnée                    SOAP

                                              ETL
                                                     REST
                                                       ...

jeudi 14 mars 13
Architecture Initiale


                    Services Data
                      REST

                                      ...
                           Staging
                                            XML
                                             CSV
                                            SOAP

                                     ETL
                                            REST
                                              ...

jeudi 14 mars 13
Architecture Initiale



                   Services Data
                     REST
                              ?       ...
                           Staging
                                             XML
                                              CSV
                                             SOAP

                                     ETL
                                             REST
                                               ...

jeudi 14 mars 13
1er choix banal mais serein.




jeudi 14 mars 13
Modélisation de données

                     Table GéoEntités
                        Nom            Lat          Lng
                   Arc de Triomphe 48.873383     2.294463
                    Notre-Dame 48.898734         2.302374

                                0,n             Table Films
                                       Film      Durée Année
                                   Persepolis     2H30      2007
                                      Rosario     1h30      2011


jeudi 14 mars 13
Nos besoins




jeudi 14 mars 13
Nos besoins

         • Fort volume




jeudi 14 mars 13
Nos besoins

         • Fort volume
         • Pas de jointure




jeudi 14 mars 13
Nos besoins

         • Fort volume
         • Pas de jointure
         • Pas de transactions
                   complexes




jeudi 14 mars 13
Nos besoins

         • Fort volume
         • Pas de jointure
         • Pas de transactions
                   complexes
         • Rapidité de lecture


jeudi 14 mars 13
Nos besoins

         • Fort volume
         • Pas de jointure
         • Pas de transactions
                   complexes
         • Rapidité de lecture
         • Scalabilité horizontale
jeudi 14 mars 13
?
jeudi 14 mars 13
Challenge




jeudi 14 mars 13
Challenge

                   • En 2 heures faire une lecture/écriture de
                     géo-entité avec MongoDB. MySQL ça serait
                     le temps nécessaire.




jeudi 14 mars 13
Challenge

                   • En 2 heures faire une lecture/écriture de
                     géo-entité avec MongoDB. MySQL ça serait
                     le temps nécessaire.




jeudi 14 mars 13
Architecture Initiale



                   Services Data
                     REST

                                      ...
                          Staging
                                            XML
                                             CSV
                                            SOAP

                                     ETL
                                            REST
                                              ...

jeudi 14 mars 13
jeudi 14 mars 13
Remise en question

             Fort volume de stockage    Fort volume de stockage

          Windows + MS SQL Server                Linux

               Recherche GéoSpatiale     Recherche Géospatiale

            Recherche sur mot clé (*)   Recherche sur mot clé (*)

                    Réplication          Réplication + Sharding
            Temps de requêtes moyen     Temps de requête moyen
                  150-300ms                    40-100ms
jeudi 14 mars 13
Architecture Initiale


                    Services Data
                      REST

                                      ...
                           Staging
                                            XML
                                             CSV
                                            SOAP

                                     ETL
                                            REST
                                              ...

jeudi 14 mars 13
Déploiement v0



                                          Staging   XML
                                                     CSV
                   ELB                              SOAP
                                                    REST
                                                      ...




jeudi 14 mars 13
Version 1


                   • L'utilisateur d'UrbanDive est en mesure de
                     créer des POI (POPI).




jeudi 14 mars 13
Déploiement v1                            Staging

                                           Replica Set




                                           Secondary
                   ELB

                                                         Arbiter
                                 Primary



                                           Secondary



jeudi 14 mars 13
Version 2

                   • Le marketing des POIs veut faire une
                     recherche full-text et du scoring.
                   • Nous voulons créer et rechercher des
                     évènements




jeudi 14 mars 13
Architecture V2



                   Services Data
                     REST

                                         ...
                          Staging
                                               XML
                                                CSV
                                               SOAP

                                        ETL
                                               REST
                                                 ...


jeudi 14 mars 13
Version 3




                   • Nombreux contenus real-time

jeudi 14 mars 13
Architecture V3



                   Services Data
                     REST

                                         ...
                          Staging
                                               XML
                                                CSV
                                               SOAP

                                        ETL
                                               REST
                                                 ...


jeudi 14 mars 13
Architecture V3



                   Services Data
                     REST

                                         ...
                          Staging
                                               XML
                                                CSV
                                               SOAP

                                        ETL
                                               REST
                                                 ...


jeudi 14 mars 13
Architecture V3



                   Services
                     REST
                              Data
                                         ...
                                               XML
                                                CSV
                                               SOAP

                                        ETL
                                               REST
                                                 ...


jeudi 14 mars 13
Conclusions




jeudi 14 mars 13
Conclusions
   • Expérience très positive




jeudi 14 mars 13
Conclusions
   • Expérience très positive
   • Prise en main très rapide




jeudi 14 mars 13
Conclusions
   • Expérience très positive
   • Prise en main très rapide
   • Facilite la vie pour multiple use case



jeudi 14 mars 13
Conclusions
   • Expérience très positive
   • Prise en main très rapide
   • Facilite la vie pour multiple use case
   • Support gratuit et commercial


jeudi 14 mars 13
Conclusions
   • Expérience très positive
   • Prise en main très rapide
   • Facilite la vie pour multiple use case
   • Support gratuit et commercial
   • Produit s'améliore en continue, point critique la suivi
           en production


jeudi 14 mars 13
3ème partie
                    Mongo Revolution




jeudi 14 mars 13
Mongo + Java = Jongo
                         ODM pour Java




jeudi 14 mars 13
Revenons à 2010 ...




jeudi 14 mars 13
jeudi 14 mars 13
jeudi 14 mars 13
jeudi 14 mars 13
{mongo : "genial"}
jeudi 14 mars 13
REST Web
                    Services
                   Search of
                     POI-s




jeudi 14 mars 13
API DBObject



                   REST Web
                    Services
                   Search of
                     POI-s




jeudi 14 mars 13
API DBObject



                               REST Web
                                Services
                               Search of
                                 POI-s




                   {DBObject : "pas mal, mais ça peut
                             être mieux"
jeudi 14 mars 13
Back on 2010 ...




jeudi 14 mars 13
Back on 2010 ...




                    Morphia ?
jeudi 14 mars 13
Morphia
                             JPA-LIKE




jeudi 14 mars 13
Donc ...
                   •   Morphia ce n’est pas mal, bon travail !




jeudi 14 mars 13
Donc ...
                   •   Morphia ce n’est pas mal, bon travail !

                   •   Mais : Nous avons besoin d’apprendre une nouvelle API
                       Need => Mongo, Driver Java, Morphia




jeudi 14 mars 13
Donc ...
                   •   Morphia ce n’est pas mal, bon travail !

                   •   Mais : Nous avons besoin d’apprendre une nouvelle API
                       Need => Mongo, Driver Java, Morphia

                   •   Mais : JPA Like -> Le paradigm de Mongo ce n’est pas du
                       JPA ou Hibernate




jeudi 14 mars 13
Donc ...
                   •   Morphia ce n’est pas mal, bon travail !

                   •   Mais : Nous avons besoin d’apprendre une nouvelle API
                       Need => Mongo, Driver Java, Morphia

                   •   Mais : JPA Like -> Le paradigm de Mongo ce n’est pas du
                       JPA ou Hibernate

                   •   Morphia arrive au driver java ?




jeudi 14 mars 13
Donc ...
                   •   Morphia ce n’est pas mal, bon travail !

                   •   Mais : Nous avons besoin d’apprendre une nouvelle API
                       Need => Mongo, Driver Java, Morphia

                   •   Mais : JPA Like -> Le paradigm de Mongo ce n’est pas du
                       JPA ou Hibernate

                   •   Morphia arrive au driver java ?

                   •   Notre choix : Morphia pour mapper les objets et le
                       Driver Java pour tout le reste.


jeudi 14 mars 13
Fin 2011 ...




jeudi 14 mars 13
@bguerout

                                       Jongo
                                                         @amsellemyves


                   •   Qu’est-ce que c’est que Jongo ?




jeudi 14 mars 13
@bguerout

                                        Jongo
                                                         @amsellemyves


                   •   Qu’est-ce que c’est que Jongo ?

                       •   ODM sur le driver Javao




jeudi 14 mars 13
@bguerout

                                        Jongo
                                                               @amsellemyves


                   •   Qu’est-ce que c’est que Jongo ?

                       •   ODM sur le driver Javao

                       •   Jackson and BSON4Jackson pour (Un)marshalling




jeudi 14 mars 13
@bguerout

                                        Jongo
                                                               @amsellemyves


                   •   Qu’est-ce que c’est que Jongo ?

                       •   ODM sur le driver Javao

                       •   Jackson and BSON4Jackson pour (Un)marshalling

                       •   Pas de JPA / Hibernate




jeudi 14 mars 13
@bguerout

                                       Jongo
                                                             @amsellemyves


                   •   Qu’est-ce que c’est que Jongo ?

                       • ODM sur le driver Javao
                       • Jackson and BSON4Jackson pour (Un)marshalling
                       • Pas de JPA / Hibernate
                       • Requête Mongo comme dans le shell



jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                          { age : {$gt:50,$lt:60} } ] })



                   FIND Driver Java :




jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                           { age : {$gt:50,$lt:60} } ] })



                   FIND Driver Java :
          DB db = mongo.getDB("users");




jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                           { age : {$gt:50,$lt:60} } ] })



                   FIND Driver Java :
          DB db = mongo.getDB("users");

          DBCollection users = db.getCollection("users");




jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                           { age : {$gt:50,$lt:60} } ] })



                   FIND Driver Java :
          DB db = mongo.getDB("users");

          DBCollection users = db.getCollection("users");

          DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get();




jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                           { age : {$gt:50,$lt:60} } ] })



                   FIND Driver Java :
          DB db = mongo.getDB("users");

          DBCollection users = db.getCollection("users");

          DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get();

          DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get();




jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                           { age : {$gt:50,$lt:60} } ] })



                   FIND Driver Java :
          DB db = mongo.getDB("users");

          DBCollection users = db.getCollection("users");

          DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get();

          DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get();

          DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get();




jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                           { age : {$gt:50,$lt:60} } ] })



                   FIND Driver Java :
          DB db = mongo.getDB("users");

          DBCollection users = db.getCollection("users");

          DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get();

          DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get();

          DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get();

          DBCursor results = collection.find(query);




jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                                 { age : {$gt:50,$lt:60} } ] })



                        FIND Driver Java :
          DB db = mongo.getDB("users");

          DBCollection users = db.getCollection("users");

          DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get();

          DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get();

          DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get();

          DBCursor results = collection.find(query);

          List<User> users = new ArrayList<User>();	 	
          for (DBObject result : results) {

          	        User user = new User();
          	        user.setUsername((String) result.get("username"));
          	        user.setAge((Integer) result.get("age"));
                   users.add(user);
          }

jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                         { age : {$gt:50,$lt:60} } ] })



                   FIND Jongo




jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                          { age : {$gt:50,$lt:60} } ] })



                   FIND Jongo


         MongoCollection collection = new Jongo(db).getCollection("users");




jeudi 14 mars 13
db.users.find({ $or : [ { age : {$gt:20,$lt:30} } ,
                                          { age : {$gt:50,$lt:60} } ] })



                   FIND Jongo


         MongoCollection collection = new Jongo(db).getCollection("users");

         Iterable<User> users = collection.find("{ $or : [ { age : {$gt:20,$lt:30} } , { age :
         {$gt:50,$lt:60} } ] }").as(User.class);




jeudi 14 mars 13
DB db = mongo.getDB("users");

                   DBCollection collection = db.getCollection("users");


                   DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get();


                   DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get();


                   DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get();


                   DBCursor results = collection.find(query);



                   List<User> users = new ArrayList<User>();	 	
                   for (DBObject result : results) {

                   	    User user = new User();
                   	    user.setUsername((String) result.get("username"));
                   	    user.setAge((Integer) result.get("age"));
                       users.add(user);
                   }




                   MongoCollection collection = new Jongo(db).getCollection("users");


                   Iterable<User> users = collection.find("{ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:
                   50,$lt:60} } ] }").as(User.class);




jeudi 14 mars 13
db.users.update({ name : 'Joe' } ,
                                   { {$inc : {age : 1} },
                                   true, true)


                   Jongo update




jeudi 14 mars 13
db.users.update({ name : 'Joe' } ,
                                        { {$inc : {age : 1} },
                                        true, true)


                        Jongo update



                   MongoCollection users = new Jongo(db).getCollection("users");




jeudi 14 mars 13
db.users.update({ name : 'Joe' } ,
                                        { {$inc : {age : 1} },
                                        true, true)


                        Jongo update



                   MongoCollection users = new Jongo(db).getCollection("users");



                   users.update("{name: 'Joe'}").upsert().multi().with("{$inc: {age: 1}}");




jeudi 14 mars 13
Templating
          MongoCollection collection = new Jongo(db).getCollection("users");

          friends.find("{name: #, age: #}", "John", 18);

          {name: 'John', age: 18}




jeudi 14 mars 13
Aggregation Fw

           MongoCollection collection = new Jongo(db).getCollection("emails");

           collection.aggregate("{$project:{sender:1}}")
                     .and("{$match:{tags:'read'}}")
                     .and("{$limit:10}")
                     .as(Email.class);




jeudi 14 mars 13
Conclusion
                   • Mongo Shell c’est un plaisir ; le driver java
                     peut l’être aussi




jeudi 14 mars 13
http://jongo.org/

                   https://github.com/bguerout/jongo

                   @bguerout - Benoit Guérout

                   @amsellemyves - Yves Amsellem




jeudi 14 mars 13
jeudi 14 mars 13
Merci pour écouter !!!




jeudi 14 mars 13

Weitere ähnliche Inhalte

Mehr von Katia Aresti

Protocol Buffer Fantásticos y donde encontrarlos
Protocol Buffer Fantásticos y donde encontrarlosProtocol Buffer Fantásticos y donde encontrarlos
Protocol Buffer Fantásticos y donde encontrarlosKatia Aresti
 
Quand un lock a besoin d'être distribué
Quand un lock a besoin d'être distribuéQuand un lock a besoin d'être distribué
Quand un lock a besoin d'être distribuéKatia Aresti
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java SecondKatia Aresti
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java SecondKatia Aresti
 
Trivial java First
Trivial java FirstTrivial java First
Trivial java FirstKatia Aresti
 
Mongo db et java en pratique
Mongo db et java en pratiqueMongo db et java en pratique
Mongo db et java en pratiqueKatia Aresti
 

Mehr von Katia Aresti (7)

Protocol Buffer Fantásticos y donde encontrarlos
Protocol Buffer Fantásticos y donde encontrarlosProtocol Buffer Fantásticos y donde encontrarlos
Protocol Buffer Fantásticos y donde encontrarlos
 
Quand un lock a besoin d'être distribué
Quand un lock a besoin d'être distribuéQuand un lock a besoin d'être distribué
Quand un lock a besoin d'être distribué
 
Jongo mongo sv
Jongo mongo svJongo mongo sv
Jongo mongo sv
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java Second
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java Second
 
Trivial java First
Trivial java FirstTrivial java First
Trivial java First
 
Mongo db et java en pratique
Mongo db et java en pratiqueMongo db et java en pratique
Mongo db et java en pratique
 

Mongo db devfestw

  • 1. MongoDB Mix Paris - Mars 2013 jeudi 14 mars 13
  • 2. Agile Developer MongoDB User @karesti MongoDB Master Katia Aresti Freelance jeudi 14 mars 13
  • 4. Faisons connaissance ... • Avant cette soirée, je ne connaissais que lui jeudi 14 mars 13
  • 5. Faisons connaissance ... • Avant cette soirée, je ne connaissais que lui • J’en ai entendu un peu parler jeudi 14 mars 13
  • 6. Faisons connaissance ... • Avant cette soirée, je ne connaissais que lui • J’en ai entendu un peu parler • J’ai déjà utilisé MongoDB à la maison jeudi 14 mars 13
  • 7. Faisons connaissance ... • Avant cette soirée, je ne connaissais que lui • J’en ai entendu un peu parler • J’ai déjà utilisé MongoDB à la maison • J’utilise MongoDB chez mon client jeudi 14 mars 13
  • 8. 1ème partie Mongo jeudi 14 mars 13
  • 10. «MongoDB has the best features of key/value stores, document databases and relational databases in one.» John Nunemaker jeudi 14 mars 13
  • 11. «MongoDB has the best features of key/value stores, document databases and relational databases in one.» John Nunemaker jeudi 14 mars 13
  • 13. Orienté Document • Pas de jointures jeudi 14 mars 13
  • 14. Orienté Document • Pas de jointures • Pas de transaction multi-documents jeudi 14 mars 13
  • 15. Orienté Document • Pas de jointures • Pas de transaction multi-documents • Les documents inclus et les tableaux limitent les besoins de jointures jeudi 14 mars 13
  • 16. Orienté Document • Pas de jointures • Pas de transaction multi-documents • Les documents inclus et les tableaux limitent les besoins de jointures • Sans schéma jeudi 14 mars 13
  • 17. Orienté Document • Pas de jointures • Pas de transaction multi-documents • Les documents inclus et les tableaux limitent les besoins de jointures • Sans schéma • Système de requêtes très évolué jeudi 14 mars 13
  • 18. Orienté Document • Pas de jointures • Pas de transaction multi-documents • Les documents inclus et les tableaux limitent les besoins de jointures • Sans schéma • Système de requêtes très évolué jeudi 14 mars 13
  • 19. La donnée normalisée Category • Name • Url Article User • Name Tag • Name • Slug • Name • Email Address • Publish date • Url • Text Comment • Comment • Date • Author © jeudi 14 mars 13
  • 20. Une base de données document Article • Name • Slug • Publish date User • Text • Name • Author • Email Address Comment[] • Comment • Date • Author Tag[] • Value Category[] • Value © jeudi 14 mars 13
  • 21. RDBMS Mongo Table,View ➜ Collection Row ➜ Document Index ➜ Index Join ➜ Embedded Document Foreign Key ➜ Reference Partition ➜ Shard jeudi 14 mars 13
  • 23. Techniquement • Ecrit en C++ jeudi 14 mars 13
  • 24. Techniquement • Ecrit en C++ • Portable (presque) partout ! jeudi 14 mars 13
  • 25. Techniquement • Ecrit en C++ • Portable (presque) partout ! • La donnée est sérialisée en BSON jeudi 14 mars 13
  • 26. Techniquement • Ecrit en C++ • Portable (presque) partout ! • La donnée est sérialisée en BSON • Utilisation massive de la mémoire jeudi 14 mars 13
  • 28. Haute-Disponibilité & Scalabilité • Réplication de server avec failover du master automatique jeudi 14 mars 13
  • 29. Haute-Disponibilité & Scalabilité • Réplication de server avec failover du master automatique • Sharding automatique jeudi 14 mars 13
  • 30. Haute-Disponibilité & Scalabilité • Réplication de server avec failover du master automatique • Sharding automatique • Distribution des lectures sur les serveurs jeudi 14 mars 13
  • 31. Haute-Disponibilité & Scalabilité • Réplication de server avec failover du master automatique • Sharding automatique • Distribution des lectures sur les serveurs jeudi 14 mars 13
  • 33. Haute performance • La plupart des opération sont faites en mémoire. jeudi 14 mars 13
  • 34. Haute performance • La plupart des opération sont faites en mémoire. • Ecriture et Lecture très rapides. jeudi 14 mars 13
  • 35. Haute performance • La plupart des opération sont faites en mémoire. • Ecriture et Lecture très rapides. • Indexation de n'importe quel champs ou sous- documents jeudi 14 mars 13
  • 36. Haute performance • La plupart des opération sont faites en mémoire. • Ecriture et Lecture très rapides. • Indexation de n'importe quel champs ou sous- documents • Ecritures asynchrones si besoin jeudi 14 mars 13
  • 37. Qui utilise MongoDB ? jeudi 14 mars 13
  • 38. 2ème partie Mongo reloaded jeudi 14 mars 13
  • 39. Il était une fois ... jeudi 14 mars 13
  • 40. Il était une fois ... jeudi 14 mars 13
  • 42. Mission • Les négociations ont échoué... jeudi 14 mars 13
  • 43. Mission • Les négociations ont échoué... • Il faut monter une équipe... jeudi 14 mars 13
  • 44. Mission • Les négociations ont échoué... • Il faut monter une équipe... • Proposer des services qui affichent 100k points d'intérêts... jeudi 14 mars 13
  • 45. Mission • Les négociations ont échoué... • Il faut monter une équipe... • Proposer des services qui affichent 100k points d'intérêts... • Et les enrichir avec une 10 de partenaires... jeudi 14 mars 13
  • 46. Mission • Les négociations ont échoué... • Il faut monter une équipe... • Proposer des services qui affichent 100k points d'intérêts... • Et les enrichir avec une 10 de partenaires... • ...en 2 mois... jeudi 14 mars 13
  • 47. Mission • Les négociations ont échoué... • Il faut monter une équipe... • Proposer des services qui affichent 100k points d'intérêts... • Et les enrichir avec une 10 de partenaires... • ...en 2 mois... jeudi 14 mars 13
  • 50. Architecture Emergente • Concept des méthodes agiles. jeudi 14 mars 13
  • 51. Architecture Emergente • Concept des méthodes agiles. • Retarder au plus tard les décisions d'architectures lourdes, afin de décider avec le plus d'éléments possibles. jeudi 14 mars 13
  • 52. Architecture Emergente • Concept des méthodes agiles. • Retarder au plus tard les décisions d'architectures lourdes, afin de décider avec le plus d'éléments possibles. • N'est possible qu'en écrivant du code de façon incremental. jeudi 14 mars 13
  • 53. Architecture Emergente • Concept des méthodes agiles. • Retarder au plus tard les décisions d'architectures lourdes, afin de décider avec le plus d'éléments possibles. • N'est possible qu'en écrivant du code de façon incremental. • Suite de tests unitaires et fonctionnels très importantes. jeudi 14 mars 13
  • 54. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 55. Architecture •Initiale Fort stockage Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 56. Architecture •Initiale Fort stockage • Rapidité de lecture Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 57. Architecture •Initiale Fort stockage • Rapidité de lecture • Recherche geospatiale Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 58. Architecture •Initiale Fort stockage • Rapidité de lecture • Recherche geospatiale • Recherche textuelle Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 59. Architecture •Initiale Fort stockage • Rapidité de lecture • Recherche geospatiale • Recherche textuelle Services Data • Requêtes complexes REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 60. Architecture •Initiale Fort stockage • Rapidité de lecture • Recherche geospatiale • Recherche textuelle Services Data • Requêtes complexes REST • Aucune écriture ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 61. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 62. Architecture Initiale Services Data REST • Très fort stockage ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 63. Architecture Initiale Services Data REST • Très fort stockage • Ecriture bulk Staging ... XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 64. Architecture Initiale Services Data REST • Très fort stockage • Ecriture bulk Staging ... • Requête simple XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 65. Architecture Initiale Services Data REST • Très fort stockage • Ecriture bulk Staging ... • Requête simple XML • CSV Historise la donnée SOAP ETL REST ... jeudi 14 mars 13
  • 66. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 67. Architecture Initiale Services Data REST ? ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 68. 1er choix banal mais serein. jeudi 14 mars 13
  • 69. Modélisation de données Table GéoEntités Nom Lat Lng Arc de Triomphe 48.873383 2.294463 Notre-Dame 48.898734 2.302374 0,n Table Films Film Durée Année Persepolis 2H30 2007 Rosario 1h30 2011 jeudi 14 mars 13
  • 71. Nos besoins • Fort volume jeudi 14 mars 13
  • 72. Nos besoins • Fort volume • Pas de jointure jeudi 14 mars 13
  • 73. Nos besoins • Fort volume • Pas de jointure • Pas de transactions complexes jeudi 14 mars 13
  • 74. Nos besoins • Fort volume • Pas de jointure • Pas de transactions complexes • Rapidité de lecture jeudi 14 mars 13
  • 75. Nos besoins • Fort volume • Pas de jointure • Pas de transactions complexes • Rapidité de lecture • Scalabilité horizontale jeudi 14 mars 13
  • 78. Challenge • En 2 heures faire une lecture/écriture de géo-entité avec MongoDB. MySQL ça serait le temps nécessaire. jeudi 14 mars 13
  • 79. Challenge • En 2 heures faire une lecture/écriture de géo-entité avec MongoDB. MySQL ça serait le temps nécessaire. jeudi 14 mars 13
  • 80. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 82. Remise en question Fort volume de stockage Fort volume de stockage Windows + MS SQL Server Linux Recherche GéoSpatiale Recherche Géospatiale Recherche sur mot clé (*) Recherche sur mot clé (*) Réplication Réplication + Sharding Temps de requêtes moyen Temps de requête moyen 150-300ms 40-100ms jeudi 14 mars 13
  • 83. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 84. Déploiement v0 Staging XML CSV ELB SOAP REST ... jeudi 14 mars 13
  • 85. Version 1 • L'utilisateur d'UrbanDive est en mesure de créer des POI (POPI). jeudi 14 mars 13
  • 86. Déploiement v1 Staging Replica Set Secondary ELB Arbiter Primary Secondary jeudi 14 mars 13
  • 87. Version 2 • Le marketing des POIs veut faire une recherche full-text et du scoring. • Nous voulons créer et rechercher des évènements jeudi 14 mars 13
  • 88. Architecture V2 Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 89. Version 3 • Nombreux contenus real-time jeudi 14 mars 13
  • 90. Architecture V3 Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 91. Architecture V3 Services Data REST ... Staging XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 92. Architecture V3 Services REST Data ... XML CSV SOAP ETL REST ... jeudi 14 mars 13
  • 94. Conclusions • Expérience très positive jeudi 14 mars 13
  • 95. Conclusions • Expérience très positive • Prise en main très rapide jeudi 14 mars 13
  • 96. Conclusions • Expérience très positive • Prise en main très rapide • Facilite la vie pour multiple use case jeudi 14 mars 13
  • 97. Conclusions • Expérience très positive • Prise en main très rapide • Facilite la vie pour multiple use case • Support gratuit et commercial jeudi 14 mars 13
  • 98. Conclusions • Expérience très positive • Prise en main très rapide • Facilite la vie pour multiple use case • Support gratuit et commercial • Produit s'améliore en continue, point critique la suivi en production jeudi 14 mars 13
  • 99. 3ème partie Mongo Revolution jeudi 14 mars 13
  • 100. Mongo + Java = Jongo ODM pour Java jeudi 14 mars 13
  • 101. Revenons à 2010 ... jeudi 14 mars 13
  • 106. REST Web Services Search of POI-s jeudi 14 mars 13
  • 107. API DBObject REST Web Services Search of POI-s jeudi 14 mars 13
  • 108. API DBObject REST Web Services Search of POI-s {DBObject : "pas mal, mais ça peut être mieux" jeudi 14 mars 13
  • 109. Back on 2010 ... jeudi 14 mars 13
  • 110. Back on 2010 ... Morphia ? jeudi 14 mars 13
  • 111. Morphia JPA-LIKE jeudi 14 mars 13
  • 112. Donc ... • Morphia ce n’est pas mal, bon travail ! jeudi 14 mars 13
  • 113. Donc ... • Morphia ce n’est pas mal, bon travail ! • Mais : Nous avons besoin d’apprendre une nouvelle API Need => Mongo, Driver Java, Morphia jeudi 14 mars 13
  • 114. Donc ... • Morphia ce n’est pas mal, bon travail ! • Mais : Nous avons besoin d’apprendre une nouvelle API Need => Mongo, Driver Java, Morphia • Mais : JPA Like -> Le paradigm de Mongo ce n’est pas du JPA ou Hibernate jeudi 14 mars 13
  • 115. Donc ... • Morphia ce n’est pas mal, bon travail ! • Mais : Nous avons besoin d’apprendre une nouvelle API Need => Mongo, Driver Java, Morphia • Mais : JPA Like -> Le paradigm de Mongo ce n’est pas du JPA ou Hibernate • Morphia arrive au driver java ? jeudi 14 mars 13
  • 116. Donc ... • Morphia ce n’est pas mal, bon travail ! • Mais : Nous avons besoin d’apprendre une nouvelle API Need => Mongo, Driver Java, Morphia • Mais : JPA Like -> Le paradigm de Mongo ce n’est pas du JPA ou Hibernate • Morphia arrive au driver java ? • Notre choix : Morphia pour mapper les objets et le Driver Java pour tout le reste. jeudi 14 mars 13
  • 117. Fin 2011 ... jeudi 14 mars 13
  • 118. @bguerout Jongo @amsellemyves • Qu’est-ce que c’est que Jongo ? jeudi 14 mars 13
  • 119. @bguerout Jongo @amsellemyves • Qu’est-ce que c’est que Jongo ? • ODM sur le driver Javao jeudi 14 mars 13
  • 120. @bguerout Jongo @amsellemyves • Qu’est-ce que c’est que Jongo ? • ODM sur le driver Javao • Jackson and BSON4Jackson pour (Un)marshalling jeudi 14 mars 13
  • 121. @bguerout Jongo @amsellemyves • Qu’est-ce que c’est que Jongo ? • ODM sur le driver Javao • Jackson and BSON4Jackson pour (Un)marshalling • Pas de JPA / Hibernate jeudi 14 mars 13
  • 122. @bguerout Jongo @amsellemyves • Qu’est-ce que c’est que Jongo ? • ODM sur le driver Javao • Jackson and BSON4Jackson pour (Un)marshalling • Pas de JPA / Hibernate • Requête Mongo comme dans le shell jeudi 14 mars 13
  • 123. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Driver Java : jeudi 14 mars 13
  • 124. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Driver Java : DB db = mongo.getDB("users"); jeudi 14 mars 13
  • 125. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Driver Java : DB db = mongo.getDB("users"); DBCollection users = db.getCollection("users"); jeudi 14 mars 13
  • 126. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Driver Java : DB db = mongo.getDB("users"); DBCollection users = db.getCollection("users"); DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get(); jeudi 14 mars 13
  • 127. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Driver Java : DB db = mongo.getDB("users"); DBCollection users = db.getCollection("users"); DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get(); DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get(); jeudi 14 mars 13
  • 128. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Driver Java : DB db = mongo.getDB("users"); DBCollection users = db.getCollection("users"); DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get(); DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get(); DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get(); jeudi 14 mars 13
  • 129. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Driver Java : DB db = mongo.getDB("users"); DBCollection users = db.getCollection("users"); DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get(); DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get(); DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get(); DBCursor results = collection.find(query); jeudi 14 mars 13
  • 130. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Driver Java : DB db = mongo.getDB("users"); DBCollection users = db.getCollection("users"); DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get(); DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get(); DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get(); DBCursor results = collection.find(query); List<User> users = new ArrayList<User>(); for (DBObject result : results) { User user = new User(); user.setUsername((String) result.get("username")); user.setAge((Integer) result.get("age")); users.add(user); } jeudi 14 mars 13
  • 131. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Jongo jeudi 14 mars 13
  • 132. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Jongo MongoCollection collection = new Jongo(db).getCollection("users"); jeudi 14 mars 13
  • 133. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Jongo MongoCollection collection = new Jongo(db).getCollection("users"); Iterable<User> users = collection.find("{ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }").as(User.class); jeudi 14 mars 13
  • 134. DB db = mongo.getDB("users"); DBCollection collection = db.getCollection("users"); DBObject firstQuery = QueryBuilder.start("age").greaterThan(20).lessThan(30).get(); DBObject secondQuery = QueryBuilder.start("age").greaterThan(50).lessThan(60).get(); DBObject query = QueryBuilder.start().or(firstQuery,secondQuery).get(); DBCursor results = collection.find(query); List<User> users = new ArrayList<User>(); for (DBObject result : results) { User user = new User(); user.setUsername((String) result.get("username")); user.setAge((Integer) result.get("age")); users.add(user); } MongoCollection collection = new Jongo(db).getCollection("users"); Iterable<User> users = collection.find("{ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt: 50,$lt:60} } ] }").as(User.class); jeudi 14 mars 13
  • 135. db.users.update({ name : 'Joe' } , { {$inc : {age : 1} }, true, true) Jongo update jeudi 14 mars 13
  • 136. db.users.update({ name : 'Joe' } , { {$inc : {age : 1} }, true, true) Jongo update MongoCollection users = new Jongo(db).getCollection("users"); jeudi 14 mars 13
  • 137. db.users.update({ name : 'Joe' } , { {$inc : {age : 1} }, true, true) Jongo update MongoCollection users = new Jongo(db).getCollection("users"); users.update("{name: 'Joe'}").upsert().multi().with("{$inc: {age: 1}}"); jeudi 14 mars 13
  • 138. Templating MongoCollection collection = new Jongo(db).getCollection("users"); friends.find("{name: #, age: #}", "John", 18); {name: 'John', age: 18} jeudi 14 mars 13
  • 139. Aggregation Fw MongoCollection collection = new Jongo(db).getCollection("emails"); collection.aggregate("{$project:{sender:1}}") .and("{$match:{tags:'read'}}") .and("{$limit:10}") .as(Email.class); jeudi 14 mars 13
  • 140. Conclusion • Mongo Shell c’est un plaisir ; le driver java peut l’être aussi jeudi 14 mars 13
  • 141. http://jongo.org/ https://github.com/bguerout/jongo @bguerout - Benoit Guérout @amsellemyves - Yves Amsellem jeudi 14 mars 13
  • 143. Merci pour écouter !!! jeudi 14 mars 13