JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
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
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" } )
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 !!