Présentation mongoDB et mongoId
Upcoming SlideShare
Loading in...5
×
 

Présentation mongoDB et mongoId

on

  • 1,062 views

A l'occasion de l'apéro Ruby du mois de novembre 2012 de Compiegne.rb, Vincent Tabary de Notso.fr et Aymeric Brisse de Perfect Memory ont fait une présentation du serveur NoSQL mongoDB et de la gem ...

A l'occasion de l'apéro Ruby du mois de novembre 2012 de Compiegne.rb, Vincent Tabary de Notso.fr et Aymeric Brisse de Perfect Memory ont fait une présentation du serveur NoSQL mongoDB et de la gem MongoId.

Statistics

Views

Total Views
1,062
Views on SlideShare
1,045
Embed Views
17

Actions

Likes
0
Downloads
22
Comments
0

1 Embed 17

http://vincent.tabary.me 17

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Présentation mongoDB et mongoId Présentation mongoDB et mongoId Presentation Transcript

  • compiegne.rb 15 nov. 2012 MongoDB / MongoId PrésentationVincent Tabary Aymeric Brisse
  • compiegne.rb 15 nov. 20121. NoSQL2. MongoDB3. MongoId4. Bibliographie
  • compiegne.rb 15 nov. 20121. NoSQLSGBD relationnels limités :* pour load balancing* pour une logique de « Big Data »SGBD démocratisé depuis 2009Systèmes destinés à InternetPourquoi NoSQL ? Ne supporte pas langage SQL
  • compiegne.rb 15 nov. 20121. NoSQLBasé sur le principe des tableaux associatifsIntégre des technologies :● clustering● réplicationRetire certaines logiques :● langage SQL● stockage sous forme de matriceMeilleures performances sur requêtes simples
  • compiegne.rb 15 nov. 20121. NoSQLExemples de serveurs :● Cassandra : Facebook, Twitter, Digg● BigTable : Google● CouchDB● Redis● Riak● SimpleDB : Amazon● MongoDB
  • compiegne.rb 15 nov. 20122. MongoDBServeur NoSQL open sourceRéplicationSharding : répartition sur des clustersRequêtesImplémentation de Map/Reduce (JS)Peut stocker des fichiers
  • compiegne.rb 15 nov. 20122. MongoDBDrivers disponibles pour plusieurs langages :● Python● Ruby● Java● Javascript (Node.js)● C++● PHP● ...
  • compiegne.rb 15 nov. 20122. MongoDB - PrésentationMongoDB ("humongous" / “énorme”) est uneBDD open source NoSQL écrite en C++distribuée sous license AGPL.
  • compiegne.rb 15 nov. 20122. MongoDB - PrésentationCaractéristiques :- BDD orienté Document : objects structurés de typeJSON 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. 20122. MongoDB - BDD orientée Document- Objets structurés au format BSON (JSON binaire), sanssché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. 20122. MongoDB - BDD orientée Document- Linked # collection ‘users’ { "_id": ObjectId("4efa8d2b7d284dad101e4bc7"), "group_ids" : [ ObjectId("50a4f7464efbbe201a000003"), ObjectId("50a4fd234efbbedd1a00000f") ], }
  • compiegne.rb 15 nov. 20122. 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. 20122. 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. 20122. 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. 20122. 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. 20122. 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. 20122. MongoDBA savoir sur MongoDB :● Pas dauthentification 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. 20123. MongoIdPlusieurs gems pour MongoDB :● MongoId● Mongo Ruby Driver, officiel● MongoMapper● ...
  • compiegne.rb 15 nov. 20123. MongoIdCommunauté activeBasé sur ActiveSupportValidationsRequêtes grâce à OriginPolymorphismeProche de ActiveRecord :● has_many, belongs_to
  • compiegne.rb 15 nov. 20123. MongoIdPris en charge pour de nombreuses gems :● Carrierwave-mongoid● ActiveAdmin (patch)● mongoid-rspec● delayed_job_mongoid● mongoid_session_store
  • compiegne.rb 15 nov. 20123. MongoIdPris en charge pour de nombreuses gems :● Carrierwave-mongoid● ActiveAdmin (patch)● mongoid-rspec● delayed_job_mongoid● mongoid_session_store
  • compiegne.rb 15 nov. 20123. MongoIdGestion des documentsGestion des documents « embedded »Gestion des « extras »● Caching● Versionning● ParanoiaGestion de Map/Reduce
  • compiegne.rb 15 nov. 20123. MongoIdCréation dune 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 => :userend
  • compiegne.rb 15 nov. 20123. MongoIdPolymorphisme :class User include Mongoid::Document include Mongoid::Timestamps embeds_many :tasks, :as => :ownerendclass Task include Mongoid::Document include Mongoid::Timestamps embedded_in :owner, :polymorphic => trueend
  • compiegne.rb 15 nov. 20123. MongoIdRequê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.countUser.all.count# => 5user.tasks.count# => 4Task.count# => 0
  • compiegne.rb 15 nov. 20123. MongoIdRequêtes :User.in(firstname:[Vincent]).union.in(firstname:[Aymeric]).count# => 2User.in(firstname: [Vincent,Aymeric]).union.in(firstname: [Aymeric,Paul]).count# => 1
  • compiegne.rb 15 nov. 20123. MongoIdExtras :class User include Mongoid::Document include Mongoid::Timestamps include Mongoid::Paranoia include Mongoid::Caching include Mongoid::VersionningEnd
  • compiegne.rb 15 nov. 20126. Bibliographie http://fr.wikipedia.org/wiki/NoSQL http://www.mongodb.org/ http://rsmith.co/2012/11/05/mongodb-gotc... https://www.ruby-toolbox.com...