Présentation mongoDB et mongoId

1 384 vues

Publié le

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.

Publié dans : Technologie
1 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à aimer ceci

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

Aucune remarque pour cette diapositive

Présentation mongoDB et mongoId

  1. 1. compiegne.rb 15 nov. 2012 MongoDB / MongoId PrésentationVincent Tabary Aymeric Brisse
  2. 2. compiegne.rb 15 nov. 20121. NoSQL2. MongoDB3. MongoId4. Bibliographie
  3. 3. 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
  4. 4. 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
  5. 5. compiegne.rb 15 nov. 20121. NoSQLExemples de serveurs :● Cassandra : Facebook, Twitter, Digg● BigTable : Google● CouchDB● Redis● Riak● SimpleDB : Amazon● MongoDB
  6. 6. 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
  7. 7. compiegne.rb 15 nov. 20122. MongoDBDrivers disponibles pour plusieurs langages :● Python● Ruby● Java● Javascript (Node.js)● C++● PHP● ...
  8. 8. compiegne.rb 15 nov. 20122. MongoDB - PrésentationMongoDB ("humongous" / “énorme”) est uneBDD open source NoSQL écrite en C++distribuée sous license AGPL.
  9. 9. 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
  10. 10. 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.
  11. 11. compiegne.rb 15 nov. 20122. MongoDB - BDD orientée Document- Linked # collection ‘users’ { "_id": ObjectId("4efa8d2b7d284dad101e4bc7"), "group_ids" : [ ObjectId("50a4f7464efbbe201a000003"), ObjectId("50a4fd234efbbedd1a00000f") ], }
  12. 12. 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" }, ] }
  13. 13. 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 } });
  14. 14. 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
  15. 15. 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 } }
  16. 16. 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 ?
  17. 17. 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+
  18. 18. compiegne.rb 15 nov. 20123. MongoIdPlusieurs gems pour MongoDB :● MongoId● Mongo Ruby Driver, officiel● MongoMapper● ...
  19. 19. compiegne.rb 15 nov. 20123. MongoIdCommunauté activeBasé sur ActiveSupportValidationsRequêtes grâce à OriginPolymorphismeProche de ActiveRecord :● has_many, belongs_to
  20. 20. compiegne.rb 15 nov. 20123. MongoIdPris en charge pour de nombreuses gems :● Carrierwave-mongoid● ActiveAdmin (patch)● mongoid-rspec● delayed_job_mongoid● mongoid_session_store
  21. 21. compiegne.rb 15 nov. 20123. MongoIdPris en charge pour de nombreuses gems :● Carrierwave-mongoid● ActiveAdmin (patch)● mongoid-rspec● delayed_job_mongoid● mongoid_session_store
  22. 22. compiegne.rb 15 nov. 20123. MongoIdGestion des documentsGestion des documents « embedded »Gestion des « extras »● Caching● Versionning● ParanoiaGestion de Map/Reduce
  23. 23. 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
  24. 24. 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
  25. 25. 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
  26. 26. 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
  27. 27. compiegne.rb 15 nov. 20123. MongoIdExtras :class User include Mongoid::Document include Mongoid::Timestamps include Mongoid::Paranoia include Mongoid::Caching include Mongoid::VersionningEnd
  28. 28. 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...

×