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

JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB

on

  • 728 views

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

Statistics

Views

Total Views
728
Views on SlideShare
726
Embed Views
2

Actions

Likes
0
Downloads
1
Comments
0

1 Embed 2

http://sebprunier.wordpress.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB Presentation Transcript

  • Un backend NoSQL pour Geektic avec MongoDB Jug Summer Camp 2013 - La Rochelle Sébastien PRUNIER - @sebprunier Jérôme CREIGNOU - @jcreignou
  • 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
  • Geektic ● Inscription via Twitter
  • 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" }
  • MongoDB 2.4 Principales nouveautés ● Text Search (beta) ● GeoSpatial Indexes ○ GeoJSON ○ Spherical Geometry ● Hashed Indexes ○ Hashed Shard Keys
  • 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 :-)
  • 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 !'); }); });
  • 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)
  • 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/
  • Step 2 - Backend Mongo Regression detected !! ● Sensibilité à la casse ○ Java ~ java ● Une piste : regexp db.geeks.find({likes : /tests/i}) Index & Performance
  • 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" } )
  • 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" : { … } } ]
  • Step 4 - Geo Localisation ● Index géospatial ○ < 2.4 : “2d” ○ >= 2.4 : “2dsphere” db.geeks.ensureIndex( { location : "2dsphere" } ) vs.
  • Step 4 - Geo Localisation ● GeoJSON ○ Point ○ LineString ○ Polygon ● Opérateurs ○ $geoWithin ○ $near ○ $geoIntersect http://geojson.org/geojson-spec.html
  • Kandinsky
  • 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 });
  • 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 } } })
  • Step 4 - Geo Localisation ● Aggregation Framework ○ “Regrouper les geeks par affinité, se situant à La Rochelle dans un rayon de 2 km” $unwind $group$near
  • The end Merci pour votre attention ! ● Questions ? ● Réponses ! ● Let’s tweet !!