Mongo db devfestw

774 vues

Publié le

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
774
Sur SlideShare
0
Issues des intégrations
0
Intégrations
6
Actions
Partages
0
Téléchargements
24
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Mongo db devfestw

  1. 1. MongoDB Mix Paris - Mars 2013jeudi 14 mars 13
  2. 2. Agile Developer MongoDB User @karesti MongoDB Master Katia Aresti Freelancejeudi 14 mars 13
  3. 3. Faisons connaissance ...jeudi 14 mars 13
  4. 4. Faisons connaissance ... • Avant cette soirée, je ne connaissais que luijeudi 14 mars 13
  5. 5. Faisons connaissance ... • Avant cette soirée, je ne connaissais que lui • J’en ai entendu un peu parlerjeudi 14 mars 13
  6. 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 maisonjeudi 14 mars 13
  7. 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 clientjeudi 14 mars 13
  8. 8. 1ème partie Mongojeudi 14 mars 13
  9. 9. Mini-introductionjeudi 14 mars 13
  10. 10. «MongoDB has the best features of key/value stores, document databases and relational databases in one.» John Nunemakerjeudi 14 mars 13
  11. 11. «MongoDB has the best features of key/value stores, document databases and relational databases in one.» John Nunemakerjeudi 14 mars 13
  12. 12. Orienté Documentjeudi 14 mars 13
  13. 13. Orienté Document • Pas de jointuresjeudi 14 mars 13
  14. 14. Orienté Document • Pas de jointures • Pas de transaction multi-documentsjeudi 14 mars 13
  15. 15. Orienté Document • Pas de jointures • Pas de transaction multi-documents • Les documents inclus et les tableaux limitent les besoins de jointuresjeudi 14 mars 13
  16. 16. Orienté Document • Pas de jointures • Pas de transaction multi-documents • Les documents inclus et les tableaux limitent les besoins de jointures • Sans schémajeudi 14 mars 13
  17. 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. 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. 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. 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. 21. RDBMS Mongo Table,View ➜ Collection Row ➜ Document Index ➜ Index Join ➜ Embedded Document Foreign Key ➜ Reference Partition ➜ Shardjeudi 14 mars 13
  22. 22. Techniquementjeudi 14 mars 13
  23. 23. Techniquement • Ecrit en C++jeudi 14 mars 13
  24. 24. Techniquement • Ecrit en C++ • Portable (presque) partout !jeudi 14 mars 13
  25. 25. Techniquement • Ecrit en C++ • Portable (presque) partout ! • La donnée est sérialisée en BSONjeudi 14 mars 13
  26. 26. Techniquement • Ecrit en C++ • Portable (presque) partout ! • La donnée est sérialisée en BSON • Utilisation massive de la mémoirejeudi 14 mars 13
  27. 27. Haute-Disponibilité & Scalabilitéjeudi 14 mars 13
  28. 28. Haute-Disponibilité & Scalabilité • Réplication de server avec failover du master automatiquejeudi 14 mars 13
  29. 29. Haute-Disponibilité & Scalabilité • Réplication de server avec failover du master automatique • Sharding automatiquejeudi 14 mars 13
  30. 30. Haute-Disponibilité & Scalabilité • Réplication de server avec failover du master automatique • Sharding automatique • Distribution des lectures sur les serveursjeudi 14 mars 13
  31. 31. Haute-Disponibilité & Scalabilité • Réplication de server avec failover du master automatique • Sharding automatique • Distribution des lectures sur les serveursjeudi 14 mars 13
  32. 32. Haute performancejeudi 14 mars 13
  33. 33. Haute performance • La plupart des opération sont faites en mémoire.jeudi 14 mars 13
  34. 34. Haute performance • La plupart des opération sont faites en mémoire. • Ecriture et Lecture très rapides.jeudi 14 mars 13
  35. 35. Haute performance • La plupart des opération sont faites en mémoire. • Ecriture et Lecture très rapides. • Indexation de nimporte quel champs ou sous- documentsjeudi 14 mars 13
  36. 36. Haute performance • La plupart des opération sont faites en mémoire. • Ecriture et Lecture très rapides. • Indexation de nimporte quel champs ou sous- documents • Ecritures asynchrones si besoinjeudi 14 mars 13
  37. 37. Qui utilise MongoDB ?jeudi 14 mars 13
  38. 38. 2ème partie Mongo reloadedjeudi 14 mars 13
  39. 39. Il était une fois ...jeudi 14 mars 13
  40. 40. Il était une fois ...jeudi 14 mars 13
  41. 41. Missionjeudi 14 mars 13
  42. 42. Mission • Les négociations ont échoué...jeudi 14 mars 13
  43. 43. Mission • Les négociations ont échoué... • Il faut monter une équipe...jeudi 14 mars 13
  44. 44. Mission • Les négociations ont échoué... • Il faut monter une équipe... • Proposer des services qui affichent 100k points dintérêts...jeudi 14 mars 13
  45. 45. Mission • Les négociations ont échoué... • Il faut monter une équipe... • Proposer des services qui affichent 100k points dintérêts... • Et les enrichir avec une 10 de partenaires...jeudi 14 mars 13
  46. 46. Mission • Les négociations ont échoué... • Il faut monter une équipe... • Proposer des services qui affichent 100k points dintérêts... • Et les enrichir avec une 10 de partenaires... • ...en 2 mois...jeudi 14 mars 13
  47. 47. Mission • Les négociations ont échoué... • Il faut monter une équipe... • Proposer des services qui affichent 100k points dintérêts... • Et les enrichir avec une 10 de partenaires... • ...en 2 mois...jeudi 14 mars 13
  48. 48. Equipe POIxjeudi 14 mars 13
  49. 49. Architecture Emergentejeudi 14 mars 13
  50. 50. Architecture Emergente • Concept des méthodes agiles.jeudi 14 mars 13
  51. 51. Architecture Emergente • Concept des méthodes agiles. • Retarder au plus tard les décisions darchitectures lourdes, afin de décider avec le plus déléments possibles.jeudi 14 mars 13
  52. 52. Architecture Emergente • Concept des méthodes agiles. • Retarder au plus tard les décisions darchitectures lourdes, afin de décider avec le plus déléments possibles. • Nest possible quen écrivant du code de façon incremental.jeudi 14 mars 13
  53. 53. Architecture Emergente • Concept des méthodes agiles. • Retarder au plus tard les décisions darchitectures lourdes, afin de décider avec le plus déléments possibles. • Nest possible quen écrivant du code de façon incremental. • Suite de tests unitaires et fonctionnels très importantes.jeudi 14 mars 13
  54. 54. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  55. 55. Architecture •Initiale Fort stockage Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  56. 56. Architecture •Initiale Fort stockage • Rapidité de lecture Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  57. 57. Architecture •Initiale Fort stockage • Rapidité de lecture • Recherche geospatiale Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  58. 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. 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. 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. 61. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  62. 62. Architecture Initiale Services Data REST • Très fort stockage ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  63. 63. Architecture Initiale Services Data REST • Très fort stockage • Ecriture bulk Staging ... XML CSV SOAP ETL REST ...jeudi 14 mars 13
  64. 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. 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. 66. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  67. 67. Architecture Initiale Services Data REST ? ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  68. 68. 1er choix banal mais serein.jeudi 14 mars 13
  69. 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 2011jeudi 14 mars 13
  70. 70. Nos besoinsjeudi 14 mars 13
  71. 71. Nos besoins • Fort volumejeudi 14 mars 13
  72. 72. Nos besoins • Fort volume • Pas de jointurejeudi 14 mars 13
  73. 73. Nos besoins • Fort volume • Pas de jointure • Pas de transactions complexesjeudi 14 mars 13
  74. 74. Nos besoins • Fort volume • Pas de jointure • Pas de transactions complexes • Rapidité de lecturejeudi 14 mars 13
  75. 75. Nos besoins • Fort volume • Pas de jointure • Pas de transactions complexes • Rapidité de lecture • Scalabilité horizontalejeudi 14 mars 13
  76. 76. ?jeudi 14 mars 13
  77. 77. Challengejeudi 14 mars 13
  78. 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. 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. 80. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  81. 81. jeudi 14 mars 13
  82. 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-100msjeudi 14 mars 13
  83. 83. Architecture Initiale Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  84. 84. Déploiement v0 Staging XML CSV ELB SOAP REST ...jeudi 14 mars 13
  85. 85. Version 1 • Lutilisateur dUrbanDive est en mesure de créer des POI (POPI).jeudi 14 mars 13
  86. 86. Déploiement v1 Staging Replica Set Secondary ELB Arbiter Primary Secondaryjeudi 14 mars 13
  87. 87. Version 2 • Le marketing des POIs veut faire une recherche full-text et du scoring. • Nous voulons créer et rechercher des évènementsjeudi 14 mars 13
  88. 88. Architecture V2 Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  89. 89. Version 3 • Nombreux contenus real-timejeudi 14 mars 13
  90. 90. Architecture V3 Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  91. 91. Architecture V3 Services Data REST ... Staging XML CSV SOAP ETL REST ...jeudi 14 mars 13
  92. 92. Architecture V3 Services REST Data ... XML CSV SOAP ETL REST ...jeudi 14 mars 13
  93. 93. Conclusionsjeudi 14 mars 13
  94. 94. Conclusions • Expérience très positivejeudi 14 mars 13
  95. 95. Conclusions • Expérience très positive • Prise en main très rapidejeudi 14 mars 13
  96. 96. Conclusions • Expérience très positive • Prise en main très rapide • Facilite la vie pour multiple use casejeudi 14 mars 13
  97. 97. Conclusions • Expérience très positive • Prise en main très rapide • Facilite la vie pour multiple use case • Support gratuit et commercialjeudi 14 mars 13
  98. 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 saméliore en continue, point critique la suivi en productionjeudi 14 mars 13
  99. 99. 3ème partie Mongo Revolutionjeudi 14 mars 13
  100. 100. Mongo + Java = Jongo ODM pour Javajeudi 14 mars 13
  101. 101. Revenons à 2010 ...jeudi 14 mars 13
  102. 102. jeudi 14 mars 13
  103. 103. jeudi 14 mars 13
  104. 104. jeudi 14 mars 13
  105. 105. {mongo : "genial"}jeudi 14 mars 13
  106. 106. REST Web Services Search of POI-sjeudi 14 mars 13
  107. 107. API DBObject REST Web Services Search of POI-sjeudi 14 mars 13
  108. 108. API DBObject REST Web Services Search of POI-s {DBObject : "pas mal, mais ça peut être mieux"jeudi 14 mars 13
  109. 109. Back on 2010 ...jeudi 14 mars 13
  110. 110. Back on 2010 ... Morphia ?jeudi 14 mars 13
  111. 111. Morphia JPA-LIKEjeudi 14 mars 13
  112. 112. Donc ... • Morphia ce n’est pas mal, bon travail !jeudi 14 mars 13
  113. 113. Donc ... • Morphia ce n’est pas mal, bon travail ! • Mais : Nous avons besoin d’apprendre une nouvelle API Need => Mongo, Driver Java, Morphiajeudi 14 mars 13
  114. 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 Hibernatejeudi 14 mars 13
  115. 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. 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. 117. Fin 2011 ...jeudi 14 mars 13
  118. 118. @bguerout Jongo @amsellemyves • Qu’est-ce que c’est que Jongo ?jeudi 14 mars 13
  119. 119. @bguerout Jongo @amsellemyves • Qu’est-ce que c’est que Jongo ? • ODM sur le driver Javaojeudi 14 mars 13
  120. 120. @bguerout Jongo @amsellemyves • Qu’est-ce que c’est que Jongo ? • ODM sur le driver Javao • Jackson and BSON4Jackson pour (Un)marshallingjeudi 14 mars 13
  121. 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 / Hibernatejeudi 14 mars 13
  122. 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 shelljeudi 14 mars 13
  123. 123. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Driver Java :jeudi 14 mars 13
  124. 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. 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. 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. 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. 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. 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. 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. 131. db.users.find({ $or : [ { age : {$gt:20,$lt:30} } , { age : {$gt:50,$lt:60} } ] }) FIND Jongojeudi 14 mars 13
  132. 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. 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. 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. 135. db.users.update({ name : Joe } , { {$inc : {age : 1} }, true, true) Jongo updatejeudi 14 mars 13
  136. 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. 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. 138. Templating MongoCollection collection = new Jongo(db).getCollection("users"); friends.find("{name: #, age: #}", "John", 18); {name: John, age: 18}jeudi 14 mars 13
  139. 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. 140. Conclusion • Mongo Shell c’est un plaisir ; le driver java peut l’être aussijeudi 14 mars 13
  141. 141. http://jongo.org/ https://github.com/bguerout/jongo @bguerout - Benoit Guérout @amsellemyves - Yves Amsellemjeudi 14 mars 13
  142. 142. jeudi 14 mars 13
  143. 143. Merci pour écouter !!!jeudi 14 mars 13

×