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

Like this? Share it with your network

Share

JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB

  • 874 views
Uploaded 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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
874
On Slideshare
872
From Embeds
2
Number of Embeds
1

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 2

http://sebprunier.wordpress.com 2

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 !!