embedded documents?             Pierre-Louis Gottfrois             Bastien Murzeau             Apéro Ruby Bordeaux, 6 déce...
• Qu’est ce qu’un document embedded ?                • Embedded or not ?                • Recherche dans les embeddeds    ...
Qu’est-ce qu’un document                      embedded ?                • Un document embedded est un document            ...
Qu’est-ce qu’un document                                    embedded ?             class Conversation               includ...
“Relate” what you occasionally need,                   “Embed” what you always need.             • Avantages :            ...
Embedded or not ?                • YES : stockage d’information en lien direct                      avec le parent (tags, ...
// Tags             link = {                 title: "RubyBdx",                 url: "http://rubybdx.org/"                 ...
Embedded or not ?             • NO : Un document MongoDB ne peut pas                  grossir de manière ‘non prévue’ :   ...
Recherche dans les                      documents embeddeds             # Use the dot notation on our conversation / messa...
Déclarations non standards             • Un peu de polymorphisme             • Pas de “embeded_in”             class Notif...
Prochain SlideShare
Chargement dans…5
×

Apéro Ruby Bdx - Embedded docs in MongoDB - 6/12/2011 -

1 864 vues

Publié le

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 864
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 094
Actions
Partages
0
Téléchargements
6
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Apéro Ruby Bdx - Embedded docs in MongoDB - 6/12/2011 -

  1. 1. embedded documents? Pierre-Louis Gottfrois Bastien Murzeau Apéro Ruby Bordeaux, 6 décembre 2011mardi 6 décembre 11 1
  2. 2. • Qu’est ce qu’un document embedded ? • Embedded or not ? • Recherche dans les embeddeds • Déclarations non standardsmardi 6 décembre 11 2
  3. 3. Qu’est-ce qu’un document embedded ? • Un document embedded est un document enregistré dans un autre • dispose des mêmes caractéristiques qu’un document standard • représente un Model • Un document embedded n’existe qu’au sein de son document parent : • toute interaction avec ce document doit se faire au travers de son parentmardi 6 décembre 11 3
  4. 4. Qu’est-ce qu’un document embedded ? class Conversation include Mongoid::Document belongs_to :author, :class_name => User embeds_many :messages end class Message include Mongoid::Document belongs_to :author, :class_name => User embedded_in :conversation end db.conversations.findOne() { "_id" : ObjectId("4e66465bf92ea16d8400000d"), "author_id" : ObjectId("4e25c0d6ff3f1f0e20000005"), "messages" : [ { "_id" : ObjectId("4e66465bf92ea16d8400000e"), "author_id" : ObjectId("4e25c0d6ff3f1f0e20000005"), "body" : "message 1" }, { "_id" : ObjectId("4e664a72f92ea16d9000005a"), "author_id" : ObjectId("4e25ec35ff3f1f0e230001a0"), "body" : "message 2" } }mardi 6 décembre 11 4
  5. 5. “Relate” what you occasionally need, “Embed” what you always need. • Avantages : • Facile a manipuler • Jointure pre-construite pour gagner en rapidite • Inconvenients : • Gros document (> 500k) • Limit de 16MBmardi 6 décembre 11 5
  6. 6. Embedded or not ? • YES : stockage d’information en lien direct avec le parent (tags, votes, bon de commande, etc.) • YES : optimisation des performances (duplication des données mais requete plus rapide) • YES : stockage d’informations dites “persistentes” (timeline, elements supprimables, etc.)mardi 6 décembre 11 6
  7. 7. // Tags link = { title: "RubyBdx", url: "http://rubybdx.org/" tags: [ruby, rails, bordeaux] } // Save this link to the links collection db.links.save(link) // Build an index on the array db.links.ensureIndex({tags : 1}) // Queries like this use an index: db.links.find({tags : bordeaux}) // Votes { _id: ObjectId(4b980a6dea2c3f4579da141e), voters: [ ObjectId(4b980a6dea2c3f4579da141f), ObjectId(4b980a6dea2c3f4579da143a), ObjectId(4b980a6dea2c3f4579da1429) ], votes: 3 }mardi 6 décembre 11 7
  8. 8. Embedded or not ? • NO : Un document MongoDB ne peut pas grossir de manière ‘non prévue’ : • Lors de la création d’une document, MongoDB alloue plus de mémoire que la taille réellement occupée par le document => attention a ne pas dépasser cette allocation • Une collection devrait toujours stocker des éléments de tailles relativement similairesmardi 6 décembre 11 8
  9. 9. Recherche dans les documents embeddeds # Use the dot notation on our conversation / message collections # Find all conversation that contains message from given author @conversations = Conversation.where("messages.author_id" => current_user.id) # More complexe queries with mongodb author_ids = [...] @conversations = Conversation.where("messages.author_id" => {$in => author_ids})mardi 6 décembre 11 9
  10. 10. Déclarations non standards • Un peu de polymorphisme • Pas de “embeded_in” class Notification embeds_one :object, :polymorphic => true end class Conversation include Mongoid::Document belongs_to :author, :class_name => User embeds_many :messages endmardi 6 décembre 11 10

×