SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
compiegne.rb 15 nov. 2012
    MongoDB / MongoId
                 Présentation




Vincent Tabary                  Aymeric Brisse
compiegne.rb 15 nov. 2012
1. NoSQL
2. MongoDB
3. MongoId
4. Bibliographie
compiegne.rb 15 nov. 2012
1. NoSQL
SGBD relationnels limités :
* pour load balancing
* pour une logique de « Big Data »


SGBD démocratisé depuis 2009
Systèmes destinés à Internet


Pourquoi NoSQL ?
   Ne supporte pas langage SQL
compiegne.rb 15 nov. 2012
1. NoSQL

Basé sur le principe des tableaux associatifs
Intégre des technologies :
●   clustering
●   réplication
Retire certaines logiques :
●   langage SQL
●   stockage sous forme de matrice
Meilleures performances sur requêtes simples
compiegne.rb 15 nov. 2012
1. NoSQL
Exemples de serveurs :
●   Cassandra : Facebook, Twitter, Digg
●   BigTable : Google
●   CouchDB
●   Redis
●   Riak
●   SimpleDB : Amazon
●   MongoDB
compiegne.rb 15 nov. 2012
2. MongoDB




Serveur NoSQL open source
Réplication
Sharding : répartition sur des clusters
Requêtes
Implémentation de Map/Reduce (JS)
Peut stocker des fichiers
compiegne.rb 15 nov. 2012
2. MongoDB

Drivers disponibles pour plusieurs langages :
●   Python
●   Ruby
●   Java
●   Javascript (Node.js)
●   C++
●   PHP
●   ...
compiegne.rb 15 nov. 2012
2. MongoDB - Présentation




MongoDB ("humongous" / “énorme”) est une
BDD open source NoSQL écrite en C++
distribuée sous license AGPL.
compiegne.rb 15 nov. 2012
2. MongoDB - Présentation
Caractéristiques :


- BDD orienté Document : objects structurés de type
JSON sans schéma
- Indexes sur n’importe quel attribut
- Replication & High Availability, Auto-Sharding
(horizontal scale)
- Requêtes orientés document
- Updates rapides : Atomic modifiers
- Map/Reduce : Process des données et agrégations
compiegne.rb 15 nov. 2012
2. MongoDB - BDD orientée Document
- Objets structurés au format BSON (JSON binaire), sans
schéma prédéterminé.
- Documents enregistrés dans des collections
  Collection “Users”
  {
  "_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
  "name": "James Bond",
  "login": "james",
  "age": 50,
  "adress":
     {
      "street" : "42 Class Street",
      "city": "Londres"
     }
  }
- Types : string, integer, boolean, double, null, array, object,
date, object id, binary data, regular expression.
compiegne.rb 15 nov. 2012
2. MongoDB - BDD orientée Document



- Linked


  # collection ‘users’
  {
  "_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
  "group_ids" : [
        ObjectId("50a4f7464efbbe201a000003"),
        ObjectId("50a4fd234efbbedd1a00000f")
  ],
  }
compiegne.rb 15 nov. 2012
2. MongoDB - BDD orientée Document

- Embed (données “pré-jointes”)

  # collection ‘users’
  {
  "_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
  "thumbnails":
       [{
        "_id": ObjectId("4efa8d2b7d284dbc987a789c"),
        "url": "http://cloud.pm.com/resources/hash.jpg"
       },
     {
        "_id": ObjectId("4efa8d2b7d284dbc987a789d"),
        "url": "http://cloud.pm.com/resources/hash2.jpg"
       },
     ]
  }
compiegne.rb 15 nov. 2012
2. MongoDB - Queries

- Récupérer les personnes ayant pour login “james”
   > db.users.find( { login : "james" } )


- Récupérer les personnes vivant à Londres
   > db.users.find( { adress.city : "Londres" } )


- Récupérer les groupes d’une personne
   > var user = db.users.findOne( { _id:
ObjectId("50a4f7264efbbe201a000001") });
   > db.groups.find( { _id : { $in : user.groups } });
compiegne.rb 15 nov. 2012
2. MongoDB - Atomic Modifiers
- Pas de support de transactions (sharding, dead locks, etc.)
- Mais Atomic Modifiers


$set - set a particular value
$unset - delete a particular field
$inc - increment a particular value by a certain amount
$push - append a value to an array
$pushAll - append several values to an array
$pull - remove a value(s) from an existing array
$pullAll - remove several value(s) from an existing array
$bit - bitwise operations
compiegne.rb 15 nov. 2012
2. MongoDB - Atomic Modifiers




- Augmenter le nombre de votes d’un media


> db.medias.update( { _id :
ObjectId("4efa8d2b7d284dad101e4bc7") } , { $inc :
{ votes_count : 1 } }
compiegne.rb 15 nov. 2012
2. MongoDB - Designer sa BDD (Schéma)
- Base de données relationnelles : schéma orienté
“normalisation” (3NF) - Théorique
- MongoDB : schéma orienté “usage” et “performance” -
Pratique


- Les questions à se poser :
●   Embed VS Linked ?
●   Combien de collections ?
●   Quelles opérations atomiques sont nécessaires ?
●   Quels indexes créer ?
●   Comment partitionner ?
compiegne.rb 15 nov. 2012
2. MongoDB


A savoir sur MongoDB :
●   Pas d'authentification par défaut
●   Version 32 bits limitée à 2GO de données
●   1 document est limité à 16mo (vs 4 avt)
●   Verrouillage global des données partagées
    ●   Jusque version 2.0
    ●   Meilleures performances en 2.2+
compiegne.rb 15 nov. 2012
3. MongoId



Plusieurs gems pour MongoDB :
●   MongoId
●   Mongo Ruby Driver, officiel
●   MongoMapper
●   ...
compiegne.rb 15 nov. 2012
3. MongoId


Communauté active
Basé sur ActiveSupport
Validations
Requêtes grâce à Origin
Polymorphisme
Proche de ActiveRecord :
●   has_many, belongs_to
compiegne.rb 15 nov. 2012
3. MongoId



Pris en charge pour de nombreuses gems :
●   Carrierwave-mongoid
●   ActiveAdmin (patch)
●   mongoid-rspec
●   delayed_job_mongoid
●   mongoid_session_store
compiegne.rb 15 nov. 2012
3. MongoId



Pris en charge pour de nombreuses gems :
●   Carrierwave-mongoid
●   ActiveAdmin (patch)
●   mongoid-rspec
●   delayed_job_mongoid
●   mongoid_session_store
compiegne.rb 15 nov. 2012
3. MongoId


Gestion des documents
Gestion des documents « embedded »
Gestion des « extras »
●   Caching
●   Versionning
●   Paranoia
Gestion de Map/Reduce
compiegne.rb 15 nov. 2012
3. MongoId

Création d'une classe :

class User
  include Mongoid::Document
  include Mongoid::Timestamps

 field :firstname, :type => String, :default => ""
 field :lastname, :type => String, :default => ""
 validates :lastname, :presence => true

  has_and_belongs_to_many :projects, :inverse_of =>
:members
  embeds_many :tasks, :inverse_of => :user
end
compiegne.rb 15 nov. 2012
3. MongoId

Polymorphisme :
class User
  include Mongoid::Document
  include Mongoid::Timestamps

 embeds_many :tasks, :as => :owner
end
class Task
  include Mongoid::Document
  include Mongoid::Timestamps

 embedded_in :owner, :polymorphic => true
end
compiegne.rb 15 nov. 2012
3. MongoId
Requêtes :
user = User.where(:firstname => 'Vincent')
# #<User _id: 5060ea5fe77989e76b000001,
created_at: 2012-09-24 23:18:55 UTC, updated_at:
2012-11-02 13:34:46 UTC, firstname: "Vincent",
lastname: "Tabary">

User.count
User.all.count
# => 5

user.tasks.count
# => 4

Task.count
# => 0
compiegne.rb 15 nov. 2012
3. MongoId



Requêtes :
User.in(firstname:
['Vincent']).union.in(firstname:
['Aymeric']).count
# => 2

User.in(firstname: ['Vincent',
'Aymeric']).union.in(firstname: ['Aymeric',
'Paul']).count
# => 1
compiegne.rb 15 nov. 2012
3. MongoId



Extras :
class User
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Paranoia
  include Mongoid::Caching
  include Mongoid::Versionning
End
compiegne.rb 15 nov. 2012
6. Bibliographie




      http://fr.wikipedia.org/wiki/NoSQL
          http://www.mongodb.org/
 http://rsmith.co/2012/11/05/mongodb-gotc...
       https://www.ruby-toolbox.com...

Weitere ähnliche Inhalte

Was ist angesagt?

ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSHoracio Gonzalez
 
MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?Sébastien Prunier
 
[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
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDBMongoDB
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSHoracio Gonzalez
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...Horacio Gonzalez
 
Retour aux fondamentaux : Penser en termes de documents
Retour aux fondamentaux : Penser en termes de documentsRetour aux fondamentaux : Penser en termes de documents
Retour aux fondamentaux : Penser en termes de documentsMongoDB
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBContent Square
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2Horacio Gonzalez
 
Gestion des données d'entreprise à l'ère de MongoDB et du Data Lake
Gestion des données d'entreprise à l'ère de MongoDB et du Data LakeGestion des données d'entreprise à l'ère de MongoDB et du Data Lake
Gestion des données d'entreprise à l'ère de MongoDB et du Data LakeMongoDB
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLHervé Leclerc
 
Les nouveautés de MongoDB 3.6
Les nouveautés de MongoDB 3.6Les nouveautés de MongoDB 3.6
Les nouveautés de MongoDB 3.6MongoDB
 
2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexingMongoDB
 
Dublin Core raffinement
Dublin Core raffinementDublin Core raffinement
Dublin Core raffinementgido40
 

Was ist angesagt? (20)

Pg jsonb format 16-9
Pg jsonb format 16-9Pg jsonb format 16-9
Pg jsonb format 16-9
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
 
MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?
 
[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 ?
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDB
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
 
Retour aux fondamentaux : Penser en termes de documents
Retour aux fondamentaux : Penser en termes de documentsRetour aux fondamentaux : Penser en termes de documents
Retour aux fondamentaux : Penser en termes de documents
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDB
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
Crud
CrudCrud
Crud
 
ToursJUG mongoDB
ToursJUG mongoDBToursJUG mongoDB
ToursJUG mongoDB
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
 
jQuery
jQueryjQuery
jQuery
 
Gestion des données d'entreprise à l'ère de MongoDB et du Data Lake
Gestion des données d'entreprise à l'ère de MongoDB et du Data LakeGestion des données d'entreprise à l'ère de MongoDB et du Data Lake
Gestion des données d'entreprise à l'ère de MongoDB et du Data Lake
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
Les nouveautés de MongoDB 3.6
Les nouveautés de MongoDB 3.6Les nouveautés de MongoDB 3.6
Les nouveautés de MongoDB 3.6
 
2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing
 
Dublin Core raffinement
Dublin Core raffinementDublin Core raffinement
Dublin Core raffinement
 

Andere mochten auch

MongoDB Shell Tips & Tricks
MongoDB Shell Tips & TricksMongoDB Shell Tips & Tricks
MongoDB Shell Tips & TricksMongoDB
 
MongoDB Management & Ansible
MongoDB Management & AnsibleMongoDB Management & Ansible
MongoDB Management & AnsibleMongoDB
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012FastConnect
 
Super marmite-pourquoi-choisir-mongodb
Super marmite-pourquoi-choisir-mongodbSuper marmite-pourquoi-choisir-mongodb
Super marmite-pourquoi-choisir-mongodbCyril Mougel
 
Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm
 
Agua
AguaAgua
Aguafehyo
 
Que Es Un Red Local
Que Es Un Red LocalQue Es Un Red Local
Que Es Un Red Localluis perez
 
No Hay Peor Ciego, Que El Que No Quiere Ver
No Hay Peor Ciego, Que El Que No Quiere VerNo Hay Peor Ciego, Que El Que No Quiere Ver
No Hay Peor Ciego, Que El Que No Quiere Verrefranes
 
Proyecto TIC en un centro educativo
Proyecto TIC en un centro educativoProyecto TIC en un centro educativo
Proyecto TIC en un centro educativofantasto
 
Mesure d'audience sociale TV et Radio: Comment enfin donner une valeur au média
Mesure d'audience sociale TV et Radio: Comment enfin donner une valeur au médiaMesure d'audience sociale TV et Radio: Comment enfin donner une valeur au média
Mesure d'audience sociale TV et Radio: Comment enfin donner une valeur au médiaSeevibes
 
Las Redes Sociales úLtimamente Configuran MáS Del 50 (Reparado)
Las Redes Sociales úLtimamente Configuran MáS Del 50 (Reparado)Las Redes Sociales úLtimamente Configuran MáS Del 50 (Reparado)
Las Redes Sociales úLtimamente Configuran MáS Del 50 (Reparado)guest1be2d5d
 
Que Es Una Red LóGica
Que Es Una Red LóGicaQue Es Una Red LóGica
Que Es Una Red LóGicaluis perez
 
Estrategia Empresaria - Fernando Cerutti en Area del Vino
Estrategia Empresaria - Fernando Cerutti en Area del VinoEstrategia Empresaria - Fernando Cerutti en Area del Vino
Estrategia Empresaria - Fernando Cerutti en Area del VinoFernando Cerutti
 
Les 10 clés pour réussir sa présence en ligne soi-même
Les 10 clés pour réussir sa présence en ligne soi-mêmeLes 10 clés pour réussir sa présence en ligne soi-même
Les 10 clés pour réussir sa présence en ligne soi-mêmeNeocamino
 
Prévention des infections et stratégies de contrôle en soins à domicile et so...
Prévention des infections et stratégies de contrôle en soins à domicile et so...Prévention des infections et stratégies de contrôle en soins à domicile et so...
Prévention des infections et stratégies de contrôle en soins à domicile et so...Canadian Patient Safety Institute
 
inf 324 01 p05 2 razonamiento critico
inf 324 01 p05 2 razonamiento criticoinf 324 01 p05 2 razonamiento critico
inf 324 01 p05 2 razonamiento criticoRomelestevez
 

Andere mochten auch (20)

MongoDB Shell Tips & Tricks
MongoDB Shell Tips & TricksMongoDB Shell Tips & Tricks
MongoDB Shell Tips & Tricks
 
Zenika MongoDB Tour - REX Amadeus
Zenika MongoDB Tour - REX AmadeusZenika MongoDB Tour - REX Amadeus
Zenika MongoDB Tour - REX Amadeus
 
MongoDB Management & Ansible
MongoDB Management & AnsibleMongoDB Management & Ansible
MongoDB Management & Ansible
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012
 
Super marmite-pourquoi-choisir-mongodb
Super marmite-pourquoi-choisir-mongodbSuper marmite-pourquoi-choisir-mongodb
Super marmite-pourquoi-choisir-mongodb
 
Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB Administration
 
Agua
AguaAgua
Agua
 
Que Es Un Red Local
Que Es Un Red LocalQue Es Un Red Local
Que Es Un Red Local
 
No Hay Peor Ciego, Que El Que No Quiere Ver
No Hay Peor Ciego, Que El Que No Quiere VerNo Hay Peor Ciego, Que El Que No Quiere Ver
No Hay Peor Ciego, Que El Que No Quiere Ver
 
Proyecto TIC en un centro educativo
Proyecto TIC en un centro educativoProyecto TIC en un centro educativo
Proyecto TIC en un centro educativo
 
Mesure d'audience sociale TV et Radio: Comment enfin donner une valeur au média
Mesure d'audience sociale TV et Radio: Comment enfin donner une valeur au médiaMesure d'audience sociale TV et Radio: Comment enfin donner une valeur au média
Mesure d'audience sociale TV et Radio: Comment enfin donner une valeur au média
 
Tutorial ..
Tutorial ..Tutorial ..
Tutorial ..
 
Las Redes Sociales úLtimamente Configuran MáS Del 50 (Reparado)
Las Redes Sociales úLtimamente Configuran MáS Del 50 (Reparado)Las Redes Sociales úLtimamente Configuran MáS Del 50 (Reparado)
Las Redes Sociales úLtimamente Configuran MáS Del 50 (Reparado)
 
El Ordenador
El OrdenadorEl Ordenador
El Ordenador
 
Que Es Una Red LóGica
Que Es Una Red LóGicaQue Es Una Red LóGica
Que Es Una Red LóGica
 
Estrategia Empresaria - Fernando Cerutti en Area del Vino
Estrategia Empresaria - Fernando Cerutti en Area del VinoEstrategia Empresaria - Fernando Cerutti en Area del Vino
Estrategia Empresaria - Fernando Cerutti en Area del Vino
 
Les 10 clés pour réussir sa présence en ligne soi-même
Les 10 clés pour réussir sa présence en ligne soi-mêmeLes 10 clés pour réussir sa présence en ligne soi-même
Les 10 clés pour réussir sa présence en ligne soi-même
 
Alimentacion
AlimentacionAlimentacion
Alimentacion
 
Prévention des infections et stratégies de contrôle en soins à domicile et so...
Prévention des infections et stratégies de contrôle en soins à domicile et so...Prévention des infections et stratégies de contrôle en soins à domicile et so...
Prévention des infections et stratégies de contrôle en soins à domicile et so...
 
inf 324 01 p05 2 razonamiento critico
inf 324 01 p05 2 razonamiento criticoinf 324 01 p05 2 razonamiento critico
inf 324 01 p05 2 razonamiento critico
 

Ähnlich wie Présentation mongoDB et mongoId

2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01MongoDB
 
Ruby et MongoDB dans la pratique, MongoFR
Ruby et MongoDB dans la pratique, MongoFRRuby et MongoDB dans la pratique, MongoFR
Ruby et MongoDB dans la pratique, MongoFRNovelys
 
Support Formation vidéo: MongoDB pour débutant
Support Formation vidéo: MongoDB pour débutantSupport Formation vidéo: MongoDB pour débutant
Support Formation vidéo: MongoDB pour débutantSmartnSkilled
 
MongoDB_presentation_tts.pptx
MongoDB_presentation_tts.pptxMongoDB_presentation_tts.pptx
MongoDB_presentation_tts.pptxZALIMAZA
 
Mongo db applicationmonitor
Mongo db applicationmonitorMongo db applicationmonitor
Mongo db applicationmonitorPhilippe Sfeir
 
MongoDB Application Monitor
MongoDB Application MonitorMongoDB Application Monitor
MongoDB Application MonitorPhilippe Sfeir
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasBruno Bonnin
 
MongoDB_presentation_p.pptx
MongoDB_presentation_p.pptxMongoDB_presentation_p.pptx
MongoDB_presentation_p.pptxZALIMAZA
 
MongoDB_presentation_ye.pptx
MongoDB_presentation_ye.pptxMongoDB_presentation_ye.pptx
MongoDB_presentation_ye.pptxZALIMAZA
 
Performances Java et OpenDJ - LyonJUG Janv. 2012
Performances Java et OpenDJ - LyonJUG Janv. 2012Performances Java et OpenDJ - LyonJUG Janv. 2012
Performances Java et OpenDJ - LyonJUG Janv. 2012Ludovic Poitou
 
MongoDB_presentation_xmls.pptx
MongoDB_presentation_xmls.pptxMongoDB_presentation_xmls.pptx
MongoDB_presentation_xmls.pptxZALIMAZA
 
Présentation Meteor soft shake
Présentation Meteor soft shakePrésentation Meteor soft shake
Présentation Meteor soft shakeMicha Roon
 
MongoDB_presentation.pptx
MongoDB_presentation.pptxMongoDB_presentation.pptx
MongoDB_presentation.pptxZALIMAZA
 
MongoDB_presentation_example.pptx
MongoDB_presentation_example.pptxMongoDB_presentation_example.pptx
MongoDB_presentation_example.pptxZALIMAZA
 
Tout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pasTout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pasBruno Bonnin
 
MongoDB_presentation_o.pptx
MongoDB_presentation_o.pptxMongoDB_presentation_o.pptx
MongoDB_presentation_o.pptxZALIMAZA
 
MongoDB_presentation_Moyou.pptx
MongoDB_presentation_Moyou.pptxMongoDB_presentation_Moyou.pptx
MongoDB_presentation_Moyou.pptxZALIMAZA
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQLAntoine Augusti
 

Ähnlich wie Présentation mongoDB et mongoId (20)

2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
 
Mongo db with C#
Mongo db with C#Mongo db with C#
Mongo db with C#
 
Ruby et MongoDB dans la pratique, MongoFR
Ruby et MongoDB dans la pratique, MongoFRRuby et MongoDB dans la pratique, MongoFR
Ruby et MongoDB dans la pratique, MongoFR
 
Support Formation vidéo: MongoDB pour débutant
Support Formation vidéo: MongoDB pour débutantSupport Formation vidéo: MongoDB pour débutant
Support Formation vidéo: MongoDB pour débutant
 
MongoDB_presentation_tts.pptx
MongoDB_presentation_tts.pptxMongoDB_presentation_tts.pptx
MongoDB_presentation_tts.pptx
 
Mongo db applicationmonitor
Mongo db applicationmonitorMongo db applicationmonitor
Mongo db applicationmonitor
 
MongoDB Application Monitor
MongoDB Application MonitorMongoDB Application Monitor
MongoDB Application Monitor
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pas
 
MongoDB_presentation_p.pptx
MongoDB_presentation_p.pptxMongoDB_presentation_p.pptx
MongoDB_presentation_p.pptx
 
MongoDB_presentation_ye.pptx
MongoDB_presentation_ye.pptxMongoDB_presentation_ye.pptx
MongoDB_presentation_ye.pptx
 
Performances Java et OpenDJ - LyonJUG Janv. 2012
Performances Java et OpenDJ - LyonJUG Janv. 2012Performances Java et OpenDJ - LyonJUG Janv. 2012
Performances Java et OpenDJ - LyonJUG Janv. 2012
 
MongoDB_presentation_xmls.pptx
MongoDB_presentation_xmls.pptxMongoDB_presentation_xmls.pptx
MongoDB_presentation_xmls.pptx
 
Présentation Meteor soft shake
Présentation Meteor soft shakePrésentation Meteor soft shake
Présentation Meteor soft shake
 
MongoDB_presentation.pptx
MongoDB_presentation.pptxMongoDB_presentation.pptx
MongoDB_presentation.pptx
 
MongoDB_presentation_example.pptx
MongoDB_presentation_example.pptxMongoDB_presentation_example.pptx
MongoDB_presentation_example.pptx
 
Tout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pasTout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pas
 
MongoDB_presentation_o.pptx
MongoDB_presentation_o.pptxMongoDB_presentation_o.pptx
MongoDB_presentation_o.pptx
 
MongoDB_presentation_Moyou.pptx
MongoDB_presentation_Moyou.pptxMongoDB_presentation_Moyou.pptx
MongoDB_presentation_Moyou.pptx
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQL
 
MongoDB.pptx
MongoDB.pptxMongoDB.pptx
MongoDB.pptx
 

Présentation mongoDB et mongoId

  • 1. compiegne.rb 15 nov. 2012 MongoDB / MongoId Présentation Vincent Tabary Aymeric Brisse
  • 2. compiegne.rb 15 nov. 2012 1. NoSQL 2. MongoDB 3. MongoId 4. Bibliographie
  • 3. compiegne.rb 15 nov. 2012 1. NoSQL SGBD relationnels limités : * pour load balancing * pour une logique de « Big Data » SGBD démocratisé depuis 2009 Systèmes destinés à Internet Pourquoi NoSQL ? Ne supporte pas langage SQL
  • 4. compiegne.rb 15 nov. 2012 1. NoSQL Basé sur le principe des tableaux associatifs Intégre des technologies : ● clustering ● réplication Retire certaines logiques : ● langage SQL ● stockage sous forme de matrice Meilleures performances sur requêtes simples
  • 5. compiegne.rb 15 nov. 2012 1. NoSQL Exemples de serveurs : ● Cassandra : Facebook, Twitter, Digg ● BigTable : Google ● CouchDB ● Redis ● Riak ● SimpleDB : Amazon ● MongoDB
  • 6. compiegne.rb 15 nov. 2012 2. MongoDB Serveur NoSQL open source Réplication Sharding : répartition sur des clusters Requêtes Implémentation de Map/Reduce (JS) Peut stocker des fichiers
  • 7. compiegne.rb 15 nov. 2012 2. MongoDB Drivers disponibles pour plusieurs langages : ● Python ● Ruby ● Java ● Javascript (Node.js) ● C++ ● PHP ● ...
  • 8. compiegne.rb 15 nov. 2012 2. MongoDB - Présentation MongoDB ("humongous" / “énorme”) est une BDD open source NoSQL écrite en C++ distribuée sous license AGPL.
  • 9. compiegne.rb 15 nov. 2012 2. MongoDB - Présentation Caractéristiques : - BDD orienté Document : objects structurés de type JSON sans schéma - Indexes sur n’importe quel attribut - Replication & High Availability, Auto-Sharding (horizontal scale) - Requêtes orientés document - Updates rapides : Atomic modifiers - Map/Reduce : Process des données et agrégations
  • 10. compiegne.rb 15 nov. 2012 2. MongoDB - BDD orientée Document - Objets structurés au format BSON (JSON binaire), sans schéma prédéterminé. - Documents enregistrés dans des collections Collection “Users” { "_id": ObjectId("4efa8d2b7d284dad101e4bc7"), "name": "James Bond", "login": "james", "age": 50, "adress": { "street" : "42 Class Street", "city": "Londres" } } - Types : string, integer, boolean, double, null, array, object, date, object id, binary data, regular expression.
  • 11. compiegne.rb 15 nov. 2012 2. MongoDB - BDD orientée Document - Linked # collection ‘users’ { "_id": ObjectId("4efa8d2b7d284dad101e4bc7"), "group_ids" : [ ObjectId("50a4f7464efbbe201a000003"), ObjectId("50a4fd234efbbedd1a00000f") ], }
  • 12. compiegne.rb 15 nov. 2012 2. MongoDB - BDD orientée Document - Embed (données “pré-jointes”) # collection ‘users’ { "_id": ObjectId("4efa8d2b7d284dad101e4bc7"), "thumbnails": [{ "_id": ObjectId("4efa8d2b7d284dbc987a789c"), "url": "http://cloud.pm.com/resources/hash.jpg" }, { "_id": ObjectId("4efa8d2b7d284dbc987a789d"), "url": "http://cloud.pm.com/resources/hash2.jpg" }, ] }
  • 13. compiegne.rb 15 nov. 2012 2. MongoDB - Queries - Récupérer les personnes ayant pour login “james” > db.users.find( { login : "james" } ) - Récupérer les personnes vivant à Londres > db.users.find( { adress.city : "Londres" } ) - Récupérer les groupes d’une personne > var user = db.users.findOne( { _id: ObjectId("50a4f7264efbbe201a000001") }); > db.groups.find( { _id : { $in : user.groups } });
  • 14. compiegne.rb 15 nov. 2012 2. MongoDB - Atomic Modifiers - Pas de support de transactions (sharding, dead locks, etc.) - Mais Atomic Modifiers $set - set a particular value $unset - delete a particular field $inc - increment a particular value by a certain amount $push - append a value to an array $pushAll - append several values to an array $pull - remove a value(s) from an existing array $pullAll - remove several value(s) from an existing array $bit - bitwise operations
  • 15. compiegne.rb 15 nov. 2012 2. MongoDB - Atomic Modifiers - Augmenter le nombre de votes d’un media > db.medias.update( { _id : ObjectId("4efa8d2b7d284dad101e4bc7") } , { $inc : { votes_count : 1 } }
  • 16. compiegne.rb 15 nov. 2012 2. MongoDB - Designer sa BDD (Schéma) - Base de données relationnelles : schéma orienté “normalisation” (3NF) - Théorique - MongoDB : schéma orienté “usage” et “performance” - Pratique - Les questions à se poser : ● Embed VS Linked ? ● Combien de collections ? ● Quelles opérations atomiques sont nécessaires ? ● Quels indexes créer ? ● Comment partitionner ?
  • 17. compiegne.rb 15 nov. 2012 2. MongoDB A savoir sur MongoDB : ● Pas d'authentification par défaut ● Version 32 bits limitée à 2GO de données ● 1 document est limité à 16mo (vs 4 avt) ● Verrouillage global des données partagées ● Jusque version 2.0 ● Meilleures performances en 2.2+
  • 18. compiegne.rb 15 nov. 2012 3. MongoId Plusieurs gems pour MongoDB : ● MongoId ● Mongo Ruby Driver, officiel ● MongoMapper ● ...
  • 19. compiegne.rb 15 nov. 2012 3. MongoId Communauté active Basé sur ActiveSupport Validations Requêtes grâce à Origin Polymorphisme Proche de ActiveRecord : ● has_many, belongs_to
  • 20. compiegne.rb 15 nov. 2012 3. MongoId Pris en charge pour de nombreuses gems : ● Carrierwave-mongoid ● ActiveAdmin (patch) ● mongoid-rspec ● delayed_job_mongoid ● mongoid_session_store
  • 21. compiegne.rb 15 nov. 2012 3. MongoId Pris en charge pour de nombreuses gems : ● Carrierwave-mongoid ● ActiveAdmin (patch) ● mongoid-rspec ● delayed_job_mongoid ● mongoid_session_store
  • 22. compiegne.rb 15 nov. 2012 3. MongoId Gestion des documents Gestion des documents « embedded » Gestion des « extras » ● Caching ● Versionning ● Paranoia Gestion de Map/Reduce
  • 23. compiegne.rb 15 nov. 2012 3. MongoId Création d'une classe : class User include Mongoid::Document include Mongoid::Timestamps field :firstname, :type => String, :default => "" field :lastname, :type => String, :default => "" validates :lastname, :presence => true has_and_belongs_to_many :projects, :inverse_of => :members embeds_many :tasks, :inverse_of => :user end
  • 24. compiegne.rb 15 nov. 2012 3. MongoId Polymorphisme : class User include Mongoid::Document include Mongoid::Timestamps embeds_many :tasks, :as => :owner end class Task include Mongoid::Document include Mongoid::Timestamps embedded_in :owner, :polymorphic => true end
  • 25. compiegne.rb 15 nov. 2012 3. MongoId Requêtes : user = User.where(:firstname => 'Vincent') # #<User _id: 5060ea5fe77989e76b000001, created_at: 2012-09-24 23:18:55 UTC, updated_at: 2012-11-02 13:34:46 UTC, firstname: "Vincent", lastname: "Tabary"> User.count User.all.count # => 5 user.tasks.count # => 4 Task.count # => 0
  • 26. compiegne.rb 15 nov. 2012 3. MongoId Requêtes : User.in(firstname: ['Vincent']).union.in(firstname: ['Aymeric']).count # => 2 User.in(firstname: ['Vincent', 'Aymeric']).union.in(firstname: ['Aymeric', 'Paul']).count # => 1
  • 27. compiegne.rb 15 nov. 2012 3. MongoId Extras : class User include Mongoid::Document include Mongoid::Timestamps include Mongoid::Paranoia include Mongoid::Caching include Mongoid::Versionning End
  • 28. compiegne.rb 15 nov. 2012 6. Bibliographie http://fr.wikipedia.org/wiki/NoSQL http://www.mongodb.org/ http://rsmith.co/2012/11/05/mongodb-gotc... https://www.ruby-toolbox.com...