SlideShare une entreprise Scribd logo
1  sur  246
Télécharger pour lire hors ligne
MongoDB

la base NoSQL qui réinvente la gestion de données

11/28/13

@dwursteisen

!1
MongoDB
Big Database
@DWURSTEISEN
http://fr.slideshare.net/soatexpert
WARNING
Il n’y a pas si longtemps que cela,
un site internet faisait sensation…
20:00:00
Ce site déboite
Oups ! Database Error
no more space disk available
IG
B

TA
A
D
oat
nS
tio
ima
An
013
ce 2
ran
xF
vox
De
Caractéristiques
(sous le capot)
Orienté document
{!

}

!
"enigme1",
!
"_id":
v e n d r e d i ",
du
e": "Enigme
"titr
e!
a t i o n ": t r u
"activ
{!

!
"enigme1",
!
"_id":
v e n d r e d i ",
du
e": "Enigme
"titr
e!
a t i o n ": t r u
"activ

}

{!

}!

"_id": "enig
me1", !
"activation"
: true, !
"joueurs": [
!
{ "email": "
john@doe.com
], !
", " s c o r e ":
20 }!
"indices": [
!
{!
"contenu": "
je suis ton
p è r e ", !
" f l a s h c o d e ":
"111-111-111
1 ", !
"joueurs": [
{ "email": "
}
john@doe.com
]!
" } ]!
Sans schéma
CREATE TABLE example_default_now (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
data VARCHAR(100),
created TIMESTAMP DEFAULT NOW()
);
CREATE TABLE example_default_now (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
data VARCHAR(100),
created TIMESTAMP DEFAULT NOW()
);
Sans transaction
Transaction
Transaction
Transaction
Transaction
Transaction
Transaction
Sans transaction
Sans transaction
Sans transaction
Sans transaction
Update atomique
Sans jointure
{!

}!

"_id": "enig
me1", !
"activation"
: true, !
"joueurs": [
!
{ "email": "
john@doe.com
], !
", " s c o r e ":
20 }!
"indices": [
!
{!
"contenu": "
je suis ton
p è r e ", !
" f l a s h c o d e ":
"111-111-111
1 ", !
"joueurs": [
{ "email": "
}
john@doe.com
]!
" } ]!
{!

}!

"_id": "enig
me1", !
"activation"
: true, !
"joueurs": [
!
{ "email": "
john@doe.com
], !
", " s c o r e ":
20 }!
"indices": [
!
{!
"contenu": "
je suis ton
p è r e ", !
" f l a s h c o d e ":
"111-111-111
1 ", !
"joueurs": [
{ "email": "
}
john@doe.com
]!
" } ]!

jointure ?
Distribué
Document = 16Mb Hard Limit
Design
des structures
des données
Type

Exemple

Int / Double / …

{ a: 1 }

Boolean

{ b: true }

String

{ c: ‘hello’ }

Array

{ d: [1, 2, 3] }

Date

{e: ISODate("2012-12-19T06:01:17.171Z")

ObjectId

{f: ObjectId(‘123456’)}

Object

{g: {a: 1, b: true}}

…

http://docs.mongodb.org/manual/reference/bson-types/
Organiser
les données selon leurs

Utilisations
ci gît la 

4ème forme 

normale
Question :

Structure de donnée pour
l’affichage d’un message ?
2
Auteur

2
Auteur

2

Contenu
Auteur

Contenu

2

Recouicoui
{
_id: ObjectId(11),
{
_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
{
_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
content: « blabla »,
{
_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
content: « blabla »,
…
{
_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
content: « blabla »,
…
recouicoui: [ObjectId(22), ObjectId(33)] 
{

!

_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
content: « blabla »,
…
recouicoui: 2, // compteur
{

!

_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
content: « blabla »,
…
recouicoui: [{user: {…}, {user: {…}]
{

!

_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
content: « blabla »,
…
recouicoui: [{user: {…}, {user: {…}]
{

!

_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
content: « blabla »,
…
recouicoui: [{user: {…} * 789013]
{

!

_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
content: « blabla »,
…
recouicoui: [{user: {…} * 789013]

> 16Mb
2
2

Information partielle
{
_id: ObjectId(11),
user: {mail: « user1 », avatar: « http://…. »,
content: « blabla »,
…
recouicoui: {
users: [{user: {…} * 5],
compteur: 789013
}
Le design d’une

bonne
complexe

structure de donnée est
Query language

s
u
o
v
z
e
l
?
r
a
s
i
P
a
ç
n
a
r
F

select * from table
Le shell : mongo
Lecture
Sélection d’un document

db.collection.findOne(…)
Query
Sélection d’un document

db.collection.findOne(…)
Sélection de documents

db.collection.find(…)
Sélection et mise à jour de document

db.collection.findAndModify(…)
Champ unique

{_id: ‘azerty’}
Champ unique

{_id: ‘azerty’}
{!

"_id": "azerty", !
"titre": "Enigme du vendredi", !
"activation": true!
}

✓
Champ unique

{_id: ‘azerty’}
{!

"_id": "azerty", !
"titre": "Enigme du vendredi", !
"activation": true!

✓

"_id": "azerty", !
"activation": true,!
"titre": "Enigme du vendredi"!

✓

}

{!

}
Champ unique

{_id: ‘azerty’}
{!

"_id": "azerty", !
"titre": "Enigme du vendredi", !
"activation": true!

✓

"_id": "azerty", !
"activation": true,!
"titre": "Enigme du vendredi"!

✓

"_id": "azerty12345", !
"activation": true,!
"titre": "Enigme du vendredi"!

✗

}

{!

}
{!

}
Sous document spécifique

{auteur: {nom: ‘Wursteisen’}}
Sous document spécifique

{auteur: {nom: ‘Wursteisen’}}
{!
"_id": "azerty", !
"auteur": {"nom":"Wursteisen"}!
}

✓
Sous document spécifique

{auteur: {nom: ‘Wursteisen’}}
{!
"_id": "azerty", !
"auteur": {"nom":"Wursteisen"}!
}

✓

{!
"_id": "azerty", !
"auteur": {"nom":"Wursteisen", "prénom":"David"}!
}

✗
Sous document spécifique

{auteur: {prénom: ‘David’, nom: ‘Wursteisen’}}
Sous document spécifique

{auteur: {prénom: ‘David’, nom: ‘Wursteisen’}}
{!
"_id": "azerty", !
"auteur": {"prénom":"David", "nom":"Wursteisen"}!
}

✓
Sous document spécifique

{auteur: {prénom: ‘David’, nom: ‘Wursteisen’}}
{!
"_id": "azerty", !
"auteur": {"prénom":"David", "nom":"Wursteisen"}!
}

✓

{!
"_id": "azerty", !
"auteur": {"nom":"Wursteisen", "prénom":"David"}!
}

✗
Sous champ

{‘auteur.nom’: ‘Wursteisen’}
Sous champ

{‘auteur.nom’: ‘Wursteisen’}
{!
"_id": "azerty", !
"auteur": {"nom":"Wursteisen"}!
}

✓
Sous champ

{‘auteur.nom’: ‘Wursteisen’}
{!
"_id": "azerty", !
"auteur": {"nom":"Wursteisen"}!
}

✓

{!
"_id": "azerty", !
"auteur": {"nom":"Wursteisen", "prénom":"David"}!
}

✓
Sous champ

{‘auteur.nom’: ‘Wursteisen’}
{!
"_id": "azerty", !
"auteur": {"nom":"Wursteisen"}!
}

✓

{!
"_id": "azerty", !
"auteur": {"nom":"Wursteisen", "prénom":"David"}!

✓

}
{!
"_id": "azerty", !
"auteur": {"nom":"Bob", "prénom":"David"}!
}

✗
Champ unique

{recouicoui: {$gt: 20}}
Champ unique

{recouicoui: {$gt: 20}}
{!
"_id": "azerty", !
"titre": "Enigme du vendredi", !
"recouicoui": 50!
}

✓
Champ unique

{recouicoui: {$gt: 20}}
{!
"_id": "azerty", !
"titre": "Enigme du vendredi", !
"recouicoui": 50!

✓

"_id": "azerty", !
"titre": "Enigme du vendredi", !
"recouicoui": 10!

✗

}
{!

}
Champ unique

{recouicoui: {$gt: 20}}
{!
"_id": "azerty", !
"titre": "Enigme du vendredi", !
"recouicoui": 50!

✓

"_id": "azerty", !
"titre": "Enigme du vendredi", !
"recouicoui": 10!

✗

"_id": "azerty", !
"titre": "Enigme du vendredi", !

✗

}
{!

}
{!

!
}
Écriture
Insertion d’un document

db.collection.insert(…)
Insertion d’un document

db.collection.insert(…)

Document
Update d’un document

db.collection.update(<query>, <update>)
Update d’un document

db.collection.update(<query>, <update>)

modifier
Update de documents

db.collection.update(…, …, {multi: true})
Écrire un document

db.collection.update(…, {prénom:’David’})
Écrire un document

db.collection.update(…, {prénom:’David’})
{!
"_id": "azerty", !
"nom": "wursteisen", !
"prénom": "bob"!
}
Écrire un document

db.collection.update(…, {prénom:’David’})
{!
"_id": "azerty", !
"nom": "wursteisen", !
"prénom": "bob"!
}

{!
"_id": "azerty", !
"prénom": "David"!
}
Modifier un champ

db.collection.update(…, {$set: {prénom:’David’}})
Modifier un champ

db.collection.update(…, {$set: {prénom:’David’}})
{!
"_id": "azerty", !
"nom": "wursteisen", !
"prénom": "bob"!
}
Modifier un champ

db.collection.update(…, {$set: {prénom:’David’}})
{!
"_id": "azerty", !
"nom": "wursteisen", !
"prénom": "bob"!
}

{!
"_id": "azerty", !
"nom": "wursteisen", !
"prénom": "David"!
}
Incrémentation

db.collection.update(…, {$inc: {recouicoui: 2 }})
Incrémentation

db.collection.update(…, {$inc: {recouicoui: 2 }})
{!
"_id": "azerty", !
"nom": "wursteisen", !
"recouicoui": 5!
}
Incrémentation

db.collection.update(…, {$inc: {recouicoui: 2 }})
{!
"_id": "azerty", !
"nom": "wursteisen", !
"recouicoui": 5!
}

{!
"_id": "azerty", !
"nom": "wursteisen", !
"recouicoui": 7!
}
Ajout dans un tableau

db.collection.update(…, {$push: {contact: ‘Robert’ }})
Ajout dans un tableau

db.collection.update(…, {$push: {contact: ‘Robert’ }})
{!
"_id": "azerty", !
"contact": ["John", "Bob"]
}

!
Ajout dans un tableau

db.collection.update(…, {$push: {contact: ‘Robert’ }})
{!
"_id": "azerty", !
"contact": ["John", "Bob"]

!

}

{!
"_id": "azerty", !
"contact": ["John", "Bob", "Robert"]
}

!
Index
Index simple

db.couicoui.ensureIndex({ name:1 })
Index composé

db.couicoui.ensureIndex({ name:1, date:-1 })
Géo index

db.couicoui.ensureIndex({ geo: ‘2d‘ })
Index avec Time To Live

db.couicoui.ensureIndex({ name:1 }, {expireAfterSeconds: 3600})
db.find({…}).explain()
{
"cursor" : "<Cursor Type and Index>",
"n" : <num>,
"nscanned" : <num>,
"scanAndOrder" : <boolean>,
…
}
Replica Set
Driver
Primary
Secondary

Secondary
Driver
Écriture
Primary
Secondary

Secondary
Driver
Écriture
Primary
Réplication
Secondary

Secondary
Driver
Écriture
Primary
Réplication
Secondary

Réplication
Secondary
Driver
Écriture
Primary
Réplication
Secondary

Lecture
Réplication
Secondary
Lecture

Driver
Écriture
Primary

Réplication
Secondary

Lecture
Réplication
Secondary
Primary
Secondary

Secondary
Primary
Heartbeats
Secondary

Secondary
Primary
Heartbeats
Secondary

Secondary
Primary
Secondary

Secondary
Primary
Secondary

Secondary
Primary ?
Primary
Primary

Secondary
Primary ?
Réplication

Primary

Primary

Secondary
Primary ?
Réplication

Primary

Primary

Secondary
Primary ?
Réplication

Primary
Heartbeats

Primary

Secondary
Primary ?
Réplication

Primary
Heartbeats

Primary

Secondary
Primary ?
Réplication

Secondary
Heartbeats

Primary

Secondary
Primary ?
Réplication

Secondary
Heartbeats

Primary

Secondary
Primary ?
Write Concern
notification d’écriture
collection.insert(…, WriteConcern.ACKNOWLEDGED);
!

db.getLastError();

(dépendant du driver)
w=1
collection.insert(…, WriteConcern.ACKNOWLEDGED);
!

db.getLastError();

(dépendant du driver)
w=1
collection.insert(…, WriteConcern.ACKNOWLEDGED);
!

db.getLastError();

bloquant
(dépendant du driver)
disable acknowledgment
w=0
Driver

Mongod
Driver

write
Mongod
write
Mongod

getLastError

w=0

Driver
getLastError
response

write
Mongod

getLastError

w=0

Driver
acknowledgment
w=1
Driver

Mongod
Driver

write
Mongod
write
Mongod

getLastError

w=1

Driver
write

getLastError

w=1

Driver

Mongod

apply
Mongod

apply

getLastError
response

write

getLastError

w=1

Driver
bloquant

Mongod

apply

getLastError
response

write

getLastError

w=1

Driver
journal
j=1
Driver

Mongod
Driver

write
Mongod
write
Mongod

getLastError

w=1,j=1

Driver
write

getLastError

w=1,j=1

Driver

Mongod

apply
write

getLastError

w=1,j=1

Driver

Mongod

apply

write to
journal
write to
journal

apply

getLastError
response

write

getLastError

w=1,j=1

Driver

Mongod
bloquant

write to
journal

apply

getLastError
response

write

getLastError

w=1,j=1

Driver

Mongod
replica acknowledgment
w=2
Driver

Primary

Secondary
Secondary
Driver

write
Primary

Secondary
Secondary
write
Primary

Secondary
Secondary

getLastError

w=2

Driver
write

getLastError

w=2

Driver

Primary

apply
Secondary
Secondary
write

getLastError

w=2

Driver

apply
Secondary
Secondary

replicate

Primary
write

getLastError

w=2

Driver

apply
Secondary
Secondary

replicate

Primary
apply

Secondary

replicate

Primary

getLastError
response

write
Secondary

getLastError

w=2

Driver
apply

Secondary

replicate

Primary

getLastError
response

Driver

getLastError

w=2

write
Secondary

bloquant
Secondary

replicate

apply

replicate

Primary

getLastError
response

Driver

getLastError

w=2

write
Secondary

bloquant
Sharding

Répartition
collection
collection

Shard1

Shard2

Shard3
collection

Shard1
{x: min}

Shard2
{x: -11}

Shard3
{x: 50}

{x: max}
Avec une clé de sharding
db.collect.find({key: …})
Mongos
db.collect.find({key: …})
Mongos
db.collect.find({key: …})
Mongos
db.collect.find({key: …})
Mongos
db.collect.find({key: …})
Mongos
Avec une clé non shardé
db.collect.find({other: …})
Mongos
db.collect.find({other: …})
Mongos
db.collect.find({other: …})
Mongos
Question :

Clé de sharding pour gérer 

les messages d’un utilisateur ?
Répartition
Cardinalité
Isolation
en écriture
_id

Fiabilité
ObjectId(« 507f1f77bcf86cd799439011 »)

http://www.mongodb.com/presentations/advanced-sharding-features-mongodb-24
Timestamp
ObjectId(« 507f1f77bcf86cd799439011 »)

http://www.mongodb.com/presentations/advanced-sharding-features-mongodb-24
Timestamp
ObjectId(« 507f1f77bcf86cd799439011 »)

Host
http://www.mongodb.com/presentations/advanced-sharding-features-mongodb-24
Timestamp

PID

ObjectId(« 507f1f77bcf86cd799439011 »)

Host
http://www.mongodb.com/presentations/advanced-sharding-features-mongodb-24
Timestamp

PID

ObjectId(« 507f1f77bcf86cd799439011 »)

Host

Compteur

http://www.mongodb.com/presentations/advanced-sharding-features-mongodb-24
Timestamp
ObjectId(« 507f1f77bcf86cd799439011 »)

http://www.mongodb.com/presentations/advanced-sharding-features-mongodb-24
Répartition
Cardinalité
Isolation
en écriture
_id

✓ ✗

✗

Fiabilité

✗
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.find({…})
Mongos
db.collect.find({…})
Mongos
db.collect.find({…})
Mongos
Répartition
Cardinalité
Isolation
en écriture
_id
hash(_id)

Fiabilité

✓ ✗ ✗
✓ ✓ ✗

✗
✗
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.find({…})
Mongos
db.collect.find({…})
Mongos
db.collect.find({…})
Mongos
Répartition
Cardinalité
Isolation
en écriture
_id
hash(_id)
user

Fiabilité

✓ ✗ ✗ ✗
✓ ✓ ✗ ✗
✗ ✓ ✓ ✓
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.find({…})
Mongos
db.collect.find({…})
Mongos
db.collect.find({…})
Mongos
Répartition
Cardinalité
Isolation
en écriture
_id
hash(_id)
user
user, time

✓
✓
✗
✓

✗
✓
✓
✓

✗
✗
✓
✓

Fiabilité

✗
✗
✓
✓
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.insert({…})
Mongos
db.collect.find({…})
Mongos
db.collect.find({…})
Mongos
db.collect.find({…})
Mongos
Aller plus loin…
https://education.mongodb.com
http://www.meetup.com/Paris-MongoDB-User-Group/
Demo
https://github.com/dwursteisen/atelier-mongodb
Questions ?
@dwursteisen
Crédits photos
http://bit.ly/HNvkfZ
http://bit.ly/1hTARzS

http://bit.ly/HGb1BO

http://bit.ly/1hrvZ7z
http://bit.ly/1d5OVTr

http://bit.ly/17SGXwC

http://bit.ly/1awf0XL

http://bit.ly/HNvRP4
http://bit.ly/MMaRr8
http://bit.ly/HGf2Gh

http://bit.ly/1967kv2

http://bit.ly/1c6uCUA

Contenu connexe

Tendances

Lausanne JUG - Elasticsearch
Lausanne JUG - ElasticsearchLausanne JUG - Elasticsearch
Lausanne JUG - ElasticsearchDavid Pilato
 
Elasticsearch - Esme sudria
Elasticsearch - Esme sudriaElasticsearch - Esme sudria
Elasticsearch - Esme sudriaDavid Pilato
 
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...Bruno Bonnin
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchDavid Pilato
 
Elasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUGElasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUGDavid Pilato
 
MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?Sébastien Prunier
 
Paris data geek - Elasticsearch
Paris data geek - ElasticsearchParis data geek - Elasticsearch
Paris data geek - ElasticsearchDavid Pilato
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Silicon Comté
 
Nantes JUG - Elasticsearch
Nantes JUG - ElasticsearchNantes JUG - Elasticsearch
Nantes JUG - ElasticsearchDavid Pilato
 
Cours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partieCours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partiekadzaki
 
Why elasticsearch rocks!
Why elasticsearch rocks!Why elasticsearch rocks!
Why elasticsearch rocks!tlrx
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBContent Square
 
Finist JUG - Elasticsearch
Finist JUG - ElasticsearchFinist JUG - Elasticsearch
Finist JUG - ElasticsearchDavid Pilato
 

Tendances (20)

Lausanne JUG - Elasticsearch
Lausanne JUG - ElasticsearchLausanne JUG - Elasticsearch
Lausanne JUG - Elasticsearch
 
Elasticsearch - Esme sudria
Elasticsearch - Esme sudriaElasticsearch - Esme sudria
Elasticsearch - Esme sudria
 
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - Elasticsearch
 
Elasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUGElasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUG
 
jQuery
jQueryjQuery
jQuery
 
MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
Paris data geek - Elasticsearch
Paris data geek - ElasticsearchParis data geek - Elasticsearch
Paris data geek - Elasticsearch
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014
 
Nantes JUG - Elasticsearch
Nantes JUG - ElasticsearchNantes JUG - Elasticsearch
Nantes JUG - Elasticsearch
 
Apprenez le jQuery
Apprenez le jQueryApprenez le jQuery
Apprenez le jQuery
 
Cours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partieCours php & Mysql - 3éme partie
Cours php & Mysql - 3éme partie
 
Why elasticsearch rocks!
Why elasticsearch rocks!Why elasticsearch rocks!
Why elasticsearch rocks!
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDB
 
Finist JUG - Elasticsearch
Finist JUG - ElasticsearchFinist JUG - Elasticsearch
Finist JUG - Elasticsearch
 
JQuery
JQueryJQuery
JQuery
 
ToursJUG mongoDB
ToursJUG mongoDBToursJUG mongoDB
ToursJUG mongoDB
 
Introduction a jQuery
Introduction a jQueryIntroduction a jQuery
Introduction a jQuery
 

En vedette

L'entreprise libérée
L'entreprise libéréeL'entreprise libérée
L'entreprise libéréeSOAT
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceLilia Sfaxi
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopLilia Sfaxi
 
BigData_TP5 : Neo4J
BigData_TP5 : Neo4JBigData_TP5 : Neo4J
BigData_TP5 : Neo4JLilia Sfaxi
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : CassandraLilia Sfaxi
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceLilia Sfaxi
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingLilia Sfaxi
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataLilia Sfaxi
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQLLilia Sfaxi
 

En vedette (10)

L'entreprise libérée
L'entreprise libéréeL'entreprise libérée
L'entreprise libérée
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-Reduce
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
BigData_TP5 : Neo4J
BigData_TP5 : Neo4JBigData_TP5 : Neo4J
BigData_TP5 : Neo4J
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 

Similaire à MongoDB : la base NoSQL qui réinvente la gestion de données

XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et I...
XebiCon'16  : Les requêtes avancées dans ElasticSearch  Par Gérome Egron et I...XebiCon'16  : Les requêtes avancées dans ElasticSearch  Par Gérome Egron et I...
XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et I...Publicis Sapient Engineering
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.MongoDB
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - ElasticsearchDavid Pilato
 
Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012David Pilato
 
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDBJugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDBSébastien Prunier
 

Similaire à MongoDB : la base NoSQL qui réinvente la gestion de données (7)

XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et I...
XebiCon'16  : Les requêtes avancées dans ElasticSearch  Par Gérome Egron et I...XebiCon'16  : Les requêtes avancées dans ElasticSearch  Par Gérome Egron et I...
XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et I...
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
 
Mongo db et nosql
Mongo db et nosqlMongo db et nosql
Mongo db et nosql
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - Elasticsearch
 
Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012
 
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDBJugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
 

Plus de SOAT

Back from Microsoft //Build 2018
Back from Microsoft //Build 2018Back from Microsoft //Build 2018
Back from Microsoft //Build 2018SOAT
 
Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !SOAT
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseSOAT
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESSOAT
 
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-DurandSOAT
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-DurandSOAT
 
2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-DurandSOAT
 
Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido SOAT
 
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotDans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotSOAT
 
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014SOAT
 
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...SOAT
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014SOAT
 
20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soatSOAT
 
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...SOAT
 
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014SOAT
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)SOAT
 
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 Xamarin et le développement natif d’applications Android, iOS et Windows en C# Xamarin et le développement natif d’applications Android, iOS et Windows en C#
Xamarin et le développement natif d’applications Android, iOS et Windows en C#SOAT
 
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatA la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatSOAT
 
Soirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSoirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSOAT
 
Présentation spring data Matthieu Briend
Présentation spring data  Matthieu BriendPrésentation spring data  Matthieu Briend
Présentation spring data Matthieu BriendSOAT
 

Plus de SOAT (20)

Back from Microsoft //Build 2018
Back from Microsoft //Build 2018Back from Microsoft //Build 2018
Back from Microsoft //Build 2018
 
Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entreprise
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
 
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand
 
2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand
 
Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido
 
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotDans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
 
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
 
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
 
20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat
 
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
 
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)
 
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 Xamarin et le développement natif d’applications Android, iOS et Windows en C# Xamarin et le développement natif d’applications Android, iOS et Windows en C#
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatA la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
 
Soirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSoirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVC
 
Présentation spring data Matthieu Briend
Présentation spring data  Matthieu BriendPrésentation spring data  Matthieu Briend
Présentation spring data Matthieu Briend
 

MongoDB : la base NoSQL qui réinvente la gestion de données