Your SlideShare is downloading. ×
0
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB

586

Published on

JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB : recherche full text et géolocalisation

JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB : recherche full text et géolocalisation

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

  • Be the first to like this

No Downloads
Views
Total Views
586
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Un backend NoSQL pour Geektic avec MongoDB Jug Summer Camp 2013 - La Rochelle Sébastien PRUNIER - @sebprunier Jérôme CREIGNOU - @jcreignou
  • 2. Geektic ● Site de rencontre pour les geeks en conférence :-) ● Développé par la team “Code Story” lors de Devoxx France 2013 ● Backend = local-geeks.json https://github.com/CodeStory/code-story-geektic
  • 3. Geektic ● Inscription via Twitter
  • 4. MongoDB ● Base de données NoSQL, orientée Document ● Stockage JSON { "nom": "Zuckerberg", "prenom": "Mark", "email": "imceobitch@facebook.com", "ville": "Palo Alto", "likes": ["Facebook", "Tongues", "PHP"], "hate1": "Tyler Winklevoss", "hate2": "Cameron Winklevoss" }
  • 5. MongoDB 2.4 Principales nouveautés ● Text Search (beta) ● GeoSpatial Indexes ○ GeoJSON ○ Spherical Geometry ● Hashed Indexes ○ Hashed Shard Keys
  • 6. Step 1 - Load Geeks ● Script de chargement des geeks dans la base Mongo ● Node.js ○ Léger, simple, JSON ○ Driver pour Mongo ○ On aime bien :-)
  • 7. Step 1 - Load Geeks var geeks = require('../../web/geeks.json'); ... db.collection('geeks', function (err, collection) { if (err) { … } collection.insert(geeks, function (err, result) { console.log(result.length + ' geek(s) inserted !'); }); });
  • 8. Step 2 - Backend Mongo ● Branchement du backend sur la base Mongo ● Utilisation de Jongo ○ “Comme si on était dans le shell” geeks.find("{ 'likes' : {$in : #} }", keywords).as(Geek.class)
  • 9. Testing ● To Mock or Not To Mock ? ● embedmongo-maven-plugin ○ pre-integration-tests : start mongo ○ post-integration-tests : stop mongo http://antoniogoncalves.org/2012/11/27/launching-the-nomock-movement/
  • 10. Step 2 - Backend Mongo Regression detected !! ● Sensibilité à la casse ○ Java ~ java ● Une piste : regexp db.geeks.find({likes : /tests/i}) Index & Performance
  • 11. Step 3 - Text Search ● Indexes de type “text” db.geeks.ensureIndex({likes: 'text'}) ● Requêtes ○ OR : scala groovy ○ PHRASE : “coder en java” ○ NOT : java -scala db.geeks.runCommand( "text", { search: "java -scala" } )
  • 12. Step 3 - Text Search ● Support des langues ○ code ~ coding db.geeks.runCommand("text", {search: "code", language: "english"}) ● Pertinence des résultats (Scoring) "results" : [ { "score" : 1.1, "obj" : { … } }, { "score" : 0.75, "obj" : { … } }, { "score" : 0.75, "obj" : { … } } ]
  • 13. Step 4 - Geo Localisation ● Index géospatial ○ < 2.4 : “2d” ○ >= 2.4 : “2dsphere” db.geeks.ensureIndex( { location : "2dsphere" } ) vs.
  • 14. Step 4 - Geo Localisation ● GeoJSON ○ Point ○ LineString ○ Polygon ● Opérateurs ○ $geoWithin ○ $near ○ $geoIntersect http://geojson.org/geojson-spec.html
  • 15. Kandinsky
  • 16. Step 4 - Geo Localisation ● Ajout des données géographiques pour les geeks déjà présents dans la base ○ Encore du Node.js :-) var gm = require('googlemaps'); ... gm.geocode(geek.ville, function (err, villes) { // enrich geek });
  • 17. Step 4 - Geo Localisation ● Requête simple ○ “Rechercher les geeks proches de Paris dans un rayon de 10 km” db.geeks.find({ location : { $near : { $geometry : { type : "Point", coordinates : [2.35, 48.853] }, $maxDistance : 10000 } } })
  • 18. Step 4 - Geo Localisation ● Aggregation Framework ○ “Regrouper les geeks par affinité, se situant à La Rochelle dans un rayon de 2 km” $unwind $group$near
  • 19. The end Merci pour votre attention ! ● Questions ? ● Réponses ! ● Let’s tweet !!

×