webinaire 3 de la série « retour aux fondamentaux » : conception de schémas : penser en termes...

21

Upload: mongodb

Post on 14-Apr-2017

536 views

Category:

Data & Analytics


1 download

TRANSCRIPT

Page 1: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents
Page 2: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

Back to Basics 2016 : Webinar 3

Thinking in DocumentsEmmanuel DELETANG

Senior solutions architecte france [email protected]

V1.2

Page 3: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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”

Page 4: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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/

Page 5: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

5

Exemple Document

{ first_name: ‘emmanuel’, surname: ‘DELETANG’, cell: +33617940786, city: ‘PARIS’, location: [45.123,47.232], Profession: [‘SA’, ‘mongo’, ‘python’], cars: [ { model: ‘RENAULT’, year: 2013, value: 1000, … }, { model: ‘UP’, year: 2015, value: 3300, … } ]}

Sous documents

Champs

Type

tableau

String

Number

Geo-Location

Page 6: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

6

Data Stores – Key Value

Key 1 Value

Key 1 Value

Key 1 Value

Page 7: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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

Page 8: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

8

Data Stores - Document

Key3

Key4

Key5

Value 3

Value 5

Value 4Key6

Value 5Key7

Value 2

Value 1Key1

Key1

Key1

Key2

Page 9: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

9

In Document Form

{ “key1” : “value 1” }

{ “key1” : { “key2” : “value 1”, “key3” : { “key4” : “value 3”, “key5” : “value 4” }}

{ “key1” : { “key6” : “value 5”, “key7” : “value 6” }}

Page 10: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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 documentdb.demo.find( { "key1.key6" : "value 4" } )

Page 11: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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 )

Page 12: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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”.

Page 13: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

13

Un a N

{ “Title” : “This is a blog post”, “Body” : “This is the body text”, “Comments” : [ { “name” : “emmanuel deletang”, “email” : “[email protected]”, “comment” : “J'aime ta façon d'écrire” }, { “name” : “John Smith”, “email” : “[email protected]”, “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

Page 14: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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

Page 15: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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 : “[email protected]”, comment :“I love your writing style”,}{ _id : ObjectID( “AAAB” ), name : “John Smith”, email : “[email protected]”, 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” : []}

Page 16: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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” : “[email protected]”,

comment :“I love your writing style”,}{ _id : ObjectID( “AAAB” ), name : “John Smith”, email : “[email protected]”, comment :“I hate your writing style”,}]

}

{ “_post_jd” : ObjectID( “ZZZZ” ), “comments” : [{ “_id” : ObjectID( “AAAA” ) “name” : “Joe Drumgoole”, “email” : “[email protected]”,

“comment” :“I love your writing style”,}{...},{...},{...},{...},{...},{...},{..},{...},{...},{...} ]

Page 17: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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,}

Page 18: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

18

Mais – un nombre fini d'événements par seconde

{ post_id : ObjectID ( “ZZZZ” ), timeStamp: ISODate("2005-01-02T00:00:00Z”), events : { 0 : { 0 : { <Info> }, 1 : { <Info> }, … 99: { <Info> }}, 1 : { 0 : { <Info> }, 1 : { <Info> }, … 99: { <Info> }}, 2 : { 0 : { <Info> }, 1 : { <Info> }, … 99: { <Info> }}, 3 : { 0 : { <Info> }, 1 : { <Info> }, … 99: { <Info> }}, ... 59 :{ 0 : { <Info> }, 1 : { <Info> }, … 99: { <Info> }}}

Page 19: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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

Page 20: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents

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.

Page 21: Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas : penser en termes de documents