Il s'agit du troisième webinaire de la série « Retour aux fondamentaux » qui a pour but de vous présenter la base de données MongoDB. Ce webinaire vous explique en quoi consiste l'architecture de bases de données orientée Document.
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents
1.
2. Back to Basics 2016 : Webinar 3
Thinking in Documents
Emmanuel DELETANG
Senior solutions architecte france
Emmanuel.deletang@mongodb.com
V1.2
3. 3
Review
• Webinar 1 : introduction au NOSQL
– Types de bases NoSQL
– MongoDB la base orientée document
– Replica Sets et Shards
• Webinar 2
– Fabriquer une application
– Ajout d’indexes
– Utilisation de la fonction “Explain”
4. 4
Pensez en mode document
• Les documents MongoDB sont des objets JavaScript
(JSON)
• Ils sont codés comme BSON
• BSON = " Binary JSON "
• BSON permet un encodage/décodage de JSON
• Plus efficace lors de la transmission et le stockage sur
disque des données
• Élimine le besoin de "text analyser " tous les sous-objets
• Spécification publique sur http://bsonspec.org/
6. 6
Data Stores – Key Value
Key 1 Value
Key 1 Value
Key 1 Value
7. 7
Data Stores - Relational
Key 1
Value 1
Value 1
Value 1
Value 1
Key 2
Value 1
Value 1
Value 1
Value 1
Key 3
Value 1
Value 1
Value 1
Value 1
Key 4
Value 1
Value 1
Value 1
Value 1
8. 8
Data Stores - Document
Key3
Key4
Key5
Value 3
Value 5
Value 4Key6
Value 5Key7
Value 2
Value 1Key1
Key1
Key1
Key2
10. 10
Some Example Queries
# trouver les 2 premiers documents
db.demo.find( { “key1” : “value 1” } )
# trouver le second document par valeur intégrée
(embedded)
db.demo.find( { "key1.key3.key4" : "value 3" } )
# trouver le 3 eme document
db.demo.find( { "key1.key6" : "value 4" } )
11. 11
Modèle et Cardinalité
• 1 à 1
–Titre et post de blog
• Un à N
– Blog après des commentaires
• Un à Millions
–Blog post avec des vues de site (par exemple
Huffington Post )
12. 12
Un a un
{
“Title” : “Ceci est un blog ”,
“Body” : “Ceci est le corps du texte d'un blog très court”,
…
}
Nous pouvons indexer “Title” et “Body”.
13. 13
Un a N
{
“Title” : “This is a blog post”,
“Body” : “This is the body text”,
“Comments” : [ { “name” : “emmanuel deletang”,
“email” : “Emmanuel.deletang@mongodb.com”,
“comment” : “J'aime ta façon d'écrire” },
{ “name” : “John Smith”,
“email” : “John.Smith@example.com”,
“comment” : “Je déteste ta façon d'écrire” }]
}
Lorsque nous nous attendons à un petit nombre de commentaires
que nous pouvons intégrer dans le document principal
14. 14
Points clés
• Quels sont les modèles d'écriture ?
– Les commentaires sont ajoutés plus fréquemment que les
messages
– Les commentaires peuvent avoir des images , des balises ,
des grands corps de texte
• Quels sont les modèles de lecture ?
– Les commentaires ne peuvent pas être affichés
– Les commentaires sont peut-être montrés dans leur propre
fenêtre
– Les gens regardent rarement tous les commentaires
15. 15
Approche 2 – collections séparées
• Gardez tous les commentaires dans une collection de commentaires séparés
• Ajoutez des références à des commentaires comme un tableau de commentaire ID
• Nécessite deux requêtes pour afficher blog et commentaires associés
• Nécessite deux écritures pour créer un commentaire
{
_id : ObjectID( “AAAA” ),
name : “Joe Drumgoole”,
email : “Joe.Drumgoole@mongodb.com”,
comment :“I love your writing style”,
}
{
_id : ObjectID( “AAAB” ),
name : “John Smith”,
email : “Joe.Drumgoole@mongodb.com”,
comment :“I hate your writing style”,
}
{
“_id” : ObjectID( “ZZZZ” ),
“Title” : “A Blog Title”,
“Body” : “A blog post”,
“comments” : [ ObjectID( “AAAA” ),
ObjectID( “AAAB” )]
}
{
“_id” : ObjectID( “ZZZZ” ),
“Title” : “A Blog Title”,
“Body” : “A blog post”,
“comments” : []
}
16. 16
Approche 3 – une solution Hybride
{
“_id” : ObjectID( “ZZZZ” ),
“Title” : “A Blog Title”,
“Body” : “A blog post”,
“comments” : [{
“_id” : ObjectID( “AAAA” )
“name” : “Joe Drumgoole”,
“email” : “Joe.D@mongodb.com”,
comment :“I love your writing style”,
}
{
_id : ObjectID( “AAAB” ),
name : “John Smith”,
email : “Joe.Drumgoole@mongodb.com”,
comment :“I hate your writing style”,
}]
}
{
“_post_jd” : ObjectID( “ZZZZ” ),
“comments” : [{
“_id” : ObjectID( “AAAA” )
“name” : “Joe Drumgoole”,
“email” : “Joe.D@mongodb.com”,
“comment” :“I love your writing
style”,
}
{...},{...},{...},{...},{...},{...}
,{..},{...},{...},{...} ]
17. 17
Et si on a « un vers Million »
• Par exemple si on souhaite suivre chaque click de Souris ?
– Chaque utilisateur va générer des tonnes d’information
– Milliers de données par post
– Millions de données pour un blog ?
• Inverser le model
– Sauvegarder un blog ID per event ?
{
“post_id” : ObjectID(“ZZZZ”),
“timestamp” : ISODate("2005-01-02T00:00:00Z”),
“location” : [24, 34]
“click” : False,
}
19. 19
Lignes directrices
• Imbriquer les objets pour le one to one
• Regarder la notions de lecture écriture pour déterminer la rupture de
données
• Ne restez pas coincés dans " un enregistrement " par article
• Pensez a la hiérarchie
• Pensez à la cardinalité
• Cultivez vos données en ajoutant des documents sans augmenter la taille
du document
• Pensez à vos index
• Une mises à jour de documents est une transaction
20. 20
Webinar suivant: Indexation avancée , texte et index géospatial
• Prise en charge complète de texte permettant à un utilisateur
d’indexer tout le contenu textuel dans leur base de données
«comme Google» pour de la recherche sur un ensemble de
données
• Indexes géospatiaux qui permettent à un utilisateur de stocker
des coordonnées géospatiales et d’effectuer des recherches sur
la base de la proximité d'un point à un autre .
Mercredi 13 Juillet, 14:00 CET.