![Page 1: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/1.jpg)
Application Development SeriesBack to BasicsInteraction avec la base de données
Tugdual Grall@tgrall
#MongoDBBasics
![Page 2: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/2.jpg)
2
• Session Précédente : Rappel
• MongoDB Inserts & Queries– ObjectId– Récupération des Documents & Cursors– Projections
• MongoDB Update– Fixed Buckets– Pre Aggregated Reports
• Write Concern– Compromis : Durabilité / Performance
Agenda
![Page 3: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/3.jpg)
3
• Virtual Genius Bar
– Utilisez la fenêtre de chat
Q & A
![Page 4: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/4.jpg)
Recap from last time….
![Page 5: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/5.jpg)
5
• Architecture de l’Application– JSON / RESTful– Basé sur Python
Architecture
Client-sideJSON
(eg AngularJS) (BSON)
Pymongo driver
Python web app
HTTP(S) REST
![Page 6: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/6.jpg)
6
• Design• Articles• Comments• Interactions• Users
Schema & Architecture
![Page 7: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/7.jpg)
7
Modèle : Articles
• Creation d’articles• Insert
• Liste d’articles• Renvois d’un Curseur
• Article Unique
{ '_id' : ObjectId(...),
'text': 'Article content…',
'date' : ISODate(...),
'title' : ’Intro to MongoDB',
'author' : 'Dan Roberts',
'tags' : ['mongodb',
'database',
'nosql’]
}
Collection : Articles
METHODESdef get_article(article_id)def get_articles():def create_article():
![Page 8: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/8.jpg)
8
Modèle : Comments
• Stockage des commentaires
• Récupération des commentaires
• Ajout nouveau commentaire au document
• ‘Bucketing’
{‘_id’ : ObjectId(..),
‘article_id’ : ObjectId(..), ‘page’ : 1, ‘count’ : 42 ‘comments’ : [
{ ‘text’ : ‘A great article, helped me understand schema design’, ‘date’ : ISODate(..), ‘author’ : ‘johnsmith’ }, …}
Collection : Comments
METHODESdef add_comment(article_id):def get_comments(article_id):
![Page 9: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/9.jpg)
9
Modèle : Interactions
• Reporting
• Used for reporting on articles
• Création de rapports “pre-aggregé”
{‘_id’ : ObjectId(..),
‘article_id’ : ObjectId(..), ‘section’ : ‘schema’,
‘date’ : ISODate(..),‘daily’: { ‘views’ : 45,
‘comments’ : 150 } ‘hours’ : { 0 : { ‘views’ : 10 }, 1 : { ‘views’ : 2 }, … 23 : { ‘views’ : 14,
‘comments’ : 10 } }}
Collection : Interactions
METHODES def add_interaction(article_id, type):
![Page 10: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/10.jpg)
Création / Requêtes
![Page 11: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/11.jpg)
11
>db.articles.insert({'text': 'Article content…’,
'date' : ISODate(...), 'title' : ’Intro to MongoDB’, 'author' : 'Dan Roberts’, 'tags' : [ 'mongodb',
'database', 'nosql’
]});
• Driver génère ObjectId() pour le _id – Si non spécifié par l’application– 12 octets- 4-octets epoch, 3-octets machine id, a 2-octets process id, 3-octets
counter.
Ajout de documents
![Page 12: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/12.jpg)
12
$gt, $gte, $in, $lt, $lte, $ne, $nin
• Utilisé pour requêter la base de données
• Logique: $or, $and, $not, $nor Element: $exists, $type
• Evalué: $mod, $regex, $where Geospatial: $geoWithin, $geoIntersects, $near, $nearSphere
Opérateurs: Comparaison
db.articles.find( { 'title' : ’Intro to MongoDB’ } )
db.articles.find( { ’date' : { ‘$lt’ : {ISODate("2014-02-
19T00:00:00.000Z") }} )
db.articles.find( { ‘tags’ : { ‘$in’ : [‘nosql’, ‘database’] } } );
![Page 13: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/13.jpg)
13
• Find retourne un curseur– Utilisé pour naviguer dans le résultat– Un curseur a plusieurs méthodes
Curseurs
>var cursor = db.articles.find ( { ’author' : ’Tug Grall’ } )>cursor.hasNext()true>cursor.next(){ '_id' : ObjectId(...),
'text': 'Article content…’, 'date' : ISODate(...), 'title' : ’Intro to MongoDB’, 'author' : 'Dan Roberts’, 'tags' : [ 'mongodb', 'database’, 'nosql’ ]
}
![Page 14: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/14.jpg)
14
• Retourne uniquement certains attributs– Booléen 0/1 pour sélectionner les attributs– Plus efficace
Projections
>var cursor = db.articles.find( { ’author' : ’Tug Grall’ } , {‘_id’:0, ‘title’:1})>cursor.hasNext()true>cursor.next(){ "title" : "Intro to MongoDB" }
![Page 15: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/15.jpg)
Mises à jour
![Page 16: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/16.jpg)
16
$each, $slice, $sort, $inc, $push$inc, $rename, $setOnInsert, $set, $unset, $max, $min
$, $addToSet, $pop, $pullAll, $pull, $pushAll, $push
$each, $slice, $sort
Opérateur : Update
>db.articles.update(
{ '_id' : ObjectId(...)},
{ '$push' : {'comments' : ‘Great
article!’ }}
)
{ 'text': 'Article content…’ 'date' : ISODate(...),
'title' : ’Intro to MongoDB’,
'author' : ’Tug Grall’,'tags' : ['mongodb',
'database’,'nosql’ ],’comments' :
[‘Great article!’ ]
}
![Page 17: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/17.jpg)
17
Ajout d’élément à un tableau
$push, $each, $slice
Opérateur : Update
>db.articles.update(
{ '_id' : ObjectId(...)},
{ '$push' : {'comments' :
{
'$each' : [‘Excellent’], '$slice' : -3}}, })
{ 'text': 'Article content…’ 'date' : ISODate(...),
'title' : ’Intro to MongoDB’,
'author' : 'Dan Roberts’,'tags' : ['mongodb',
'database’,'nosql’ ],’comments' :
[‘Great article!’, ‘More please’, ‘Excellent’ ]
}
![Page 18: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/18.jpg)
18
• Ajout de commentaires dans un document (max : 10 - bucket).
• Création d’un nouveau.
• Utilisation de {upsert: true} .
Opérateur : Update- Bucketing
>db.comments.update(
{‘c’: {‘$lt’:10}}, {
‘$inc’ : {c:1}, '$push' : {
'comments' : ‘Excellent’}},{ upsert : true }
)
{‘_id’ : ObjectId( … )‘c’ : 3,’comments' :
[‘Great article!’,
‘More please’, ‘Excellent’ ]
}
![Page 19: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/19.jpg)
19
Analytique– Pre-Agrégation
• Reporting
• Rapports Pré-agregés
{‘_id’ : ObjectId(..),
‘article_id’ : ObjectId(..), ‘section’ : ‘schema’,
‘date’ : ISODate(..),‘daily’: { ‘views’ : 45,
‘comments’ : 150 } ‘hours’ : { 0 : { ‘views’ : 10 }, 1 : { ‘views’ : 2 }, … 23 : { ‘views’ : 14,
‘comments’ : 10 } }}
Collections : Interactions
METHODE def add_interaction(article_id, type):
![Page 20: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/20.jpg)
20
• Utilisation de $inc pour incrémenter plusieurs compteurs.
• Opération atomique
• Incrémentation des compteurs par jour et heure
Compteurs : Incrément
>db.interactions.update({‘article_id’ : ObjectId(..)}, {
‘$inc’ : {
‘daily.views’:1,
‘daily.comments’:1
‘hours.8.views’:1
‘hours.8.comments’:1 })
{‘_id’ : ObjectId(..),
‘article_id’ : ObjectId(..), ‘section’ : ‘schema’,
‘date’ : ISODate(..),‘daily’: { ‘views’ : 45,
‘comments’ : 150 } ‘hours’ : { 0 : { ‘views’ : 10 }, 1 : { ‘views’ : 2 }, … 23 : { ‘views’ : 14,
‘comments’ : 10 } }}
![Page 21: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/21.jpg)
21
• Création de nouveaux compteurs
Compteurs : Incrément (2)
>db.interactions.update({‘article_id’ : ObjectId(..)}, {
‘$inc’ : {
‘daily.views’:1,
‘daily.comments’:1,
‘hours.8.views’:1,
‘hours.8.comments’:1,
‘referrers.bing’ : 1})
{‘_id’ : ObjectId(..),
‘article_id’ : ObjectId(..), ‘section’ : ‘schema’,
‘date’ : ISODate(..),‘daily’: { ‘views’ : 45,
‘comments’ : 150 } ‘hours’ : {
…..}‘referrers’ : {
‘google’ : 27}
}
![Page 22: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/22.jpg)
22
• Increment new counters
Compteurs : Incrément (2)
>db.interactions.update({‘article_id’ : ObjectId(..)}, {
‘$inc’ : {
‘daily.views’:1,
‘daily.comments’:1,
‘hours.8.views’:1,
‘hours.8.comments’:1,
‘referrers.bing’ : 1})
{‘_id’ : ObjectId(..),
‘article_id’ : ObjectId(..), ‘section’ : ‘schema’,
‘date’ : ISODate(..),‘daily’: { ‘views’ : 45,
‘comments’ : 150 } ‘hours’ : {
…..}‘referrers’ : {
‘google’ : 27,‘bing’ : 1
}}
![Page 23: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/23.jpg)
Durabilité
![Page 24: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/24.jpg)
24
Durabilité
• Avec MongoDB, plusieurs options• Memoire/RAM• Disque (primaire)• Plusieurs serveur (replicats)
• Write Concerns• Retour sur le status de l’opération d’écriture• getLastError() appelé par le driver
• Compromis• Latence
![Page 25: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/25.jpg)
25
Unacknowledged
![Page 26: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/26.jpg)
26
MongoDB Acknowledged
Default Write Concern
![Page 27: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/27.jpg)
27
Wait for Journal Sync
![Page 28: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/28.jpg)
28
Replica Sets
• Replica Set – 2 copies ou plus
• Tolérant aux pannes
• Répond à plusieurs contraintes:
- High Availability
- Disaster Recovery
- Maintenance
![Page 29: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/29.jpg)
29
Wait for Replication
![Page 30: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/30.jpg)
Résumé
![Page 31: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/31.jpg)
31
• Interactions
– Requtes et projections– Inserts & Upserts
– Opérateurs : Update– Bucketing– Rapports pre-agrégés
• Base pour les rapport analytiques
Résumé
![Page 32: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/32.jpg)
32
– Indexation• Stratégies/Options• Optimisation
– Text Search
– Geo Spatial
– Query Profiler
Prochaine Session – 9 Avril
![Page 33: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/33.jpg)
![Page 34: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/34.jpg)
Tweet vos questions à
#mongoDBBasics
![Page 35: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/35.jpg)
Risorsa WEBSITE
URL
Enterprise Download
mongodb.com/download
Training Online Gratuito
education.mongodb.com
Webinars e Events
mongodb.com/events
White Paper
mongodb.com/white-papers
Casi d’Uso
mongodb.com/customers
Presentazioni
mongodb.com/presentations
Documentazione
docs.mongodb.org
![Page 36: 2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev](https://reader035.vdocuments.fr/reader035/viewer/2022070317/55649c1fd8b42ab8278b5167/html5/thumbnails/36.jpg)