O slideshow foi denunciado.

Mais Conteúdo rRelacionado

Audiolivros relacionados

Gratuito durante 14 dias do Scribd

Ver tudo

Introduction to MongoDB

  1. 1. MongoDB Alex Bilbie
  2. 2. Alex Bilbie Developer at the University of Lincoln Happy MongoDB user since 2010 Tweet me @alexbilbie
  3. 3. Relational Database Management Systems
  4. 4. Relational Database Management Systems (RDBMS)
  5. 5. RDBMS Almost every application has one Schemas Joins, aggregation, normalisation
  6. 6. RDBMS Difficult to scale Can be inflexible
  7. 7. MongoDB Developed by 10gen in 2007 Open sourced in 2009 Bridge the gap between key-value stores and RDBMS
  8. 8. MongoDB Performance “Bitchin’ fast” Rich dynamic queries Lazy creation Schema-less Easy replication and failover Auto sharding 13 official language drivers (dozens of community-created drivers)
  9. 9. Memcached Key/value Performance MongoDB stores RDBMS Functionality
  10. 10. Limitations No transactions No joins 32bit integers Memory-whore 16MB document size Authentication
  11. 11. Some terminology Document == row Collection == table Database == database
  12. 12. Documents
  13. 13. { “_id” : ObjectID(“7qhlhsdf89sdf98899989a”), “name” : “Alex”, “age” : 22, “tags” : [“PHP”, “REST”, “APIs”, “MongoDB”] }
  14. 14. Documents Can store JSON types - strings, integers, floats, doubles, arrays, objects, null, boolean Special types - data, object id, binary, regex, and code 16mb hard limit Every document can have different keys
  15. 15. Collections
  16. 16. Collections Logical groups of documents Indexes
  17. 17. Databases Contain collections Authentication Global read/write user Local read/write user Local read only user
  18. 18. Executables mongo mongod mongos mongodump mongorestore mongosniff
  19. 19. PHP driver pecl install mongo Source on Github - http://lncn.eu/cdu7 Regularly updated CodeIgniter library - http://lncn.eu/fmy5
  20. 20. mongo
  21. 21. > show dbs admin blog > use blog switched to blog > show collections posts
  22. 22. > db.posts.count() 1
  23. 23. > db.posts.findOne() { _id : ObjectId(‘8dfhosiahdf89sf9sd’), title : “Hello world!”, body : “Lorem ipsum...”, author : { name : “Alex” } } > db.posts.find().limit(1) > db.posts.find().limit(1).pretty()
  24. 24. > db.posts.insert({ title : “Another post”, body : “Dolor sit amet...” author : { name : “Alex” }, tags : [“PHP”, “MongoDB”] }) > db.posts.save({...})
  25. 25. SELECT * FROM posts WHERE title = “Another Post” db.posts.find({title : “Another Post”}) { _id : ObjectId(‘8dfhosiahdf89sf9sd’), title : “Another post”, body : “Dolor sit amet...”, author : {name : “Alex”}, tags : [“PHP”, “MongoDB”] }
  26. 26. SELECT body FROM posts WHERE title = “Another Post” db.posts.find({title : “Another Post”}, {body : 1}) { _id : ObjectId(‘8dfhosiahdf89sf9sd’), body : “Dolor sit amet...” }
  27. 27. db.posts.find({}, {author.name : 1})
  28. 28. db.posts.find({author.name : /Alex/}, {author.name : 1}) db.posts.find({author.name : /alex/i}, {author.name : 1})
  29. 29. db.posts.find().sort(title : 1) db.posts.find().sort(title : -1) db.posts.find().limit(1) db.posts.find().limit(1).skip(1)
  30. 30. db.people.insert({name : “Alex”, age: 22, sex : “Male”}) db.people.insert({name : “Nick”, age: 24, sex : “Male”}) db.people.insert({name : “Steph”, age: 28, sex : “Female”})
  31. 31. SELECT * FROM people WHERE age > 22 db.people.find({age : {$gt : 22}})
  32. 32. SELECT * FROM people WHERE age <= 25 db.people.find({age : {$lte : 25}})
  33. 33. $gt Greater than $gte Greater than or equal to $lt Less than $lte Less than or equal to $ne Not equal to $in In array $nin Not in array
  34. 34. $mod Mod operator $all Matches all values in array $size Size of array $exists Key in array exists $type Matches data type $not Negates value of another operator $or Where == OR == $nor Where !== AND !==
  35. 35. // single ascending index db.people.ensureIndex({name:1})
  36. 36. // single descending index db.people.ensureIndex({name:-1})
  37. 37. // unique db.people.ensureIndex({name:-1}, {unique: true})
  38. 38. // non blocking db.people.ensureIndex({name:1}, {background:true})
  39. 39. // compound db.people.ensureIndex({name:1, age: 1})
  40. 40. { _id: ObjectId(‘...’), name: “Hotel IBIS” location: { lon: 54.2285, lat: -0.5477 } } db.places.ensureIndex({location: 2d})
  41. 41. // Remove all documents db.people.remove() // Remove with condition db.people.remove({name: “Alex”})
  42. 42. // Update db.people.update({name: “Alex”}, {$set : {name: “Alex Bilbie”})
  43. 43. $inc Increment value $set Set field to value $unset Delete field $push Appends field to value (if field is an array otherwise works like $set) $pushAll Multiple $push $addToSet $push only if not exists $pop Array pop $pull Removes all occurrences of value
  44. 44. $pull Removes all occurrences of value $pullAll Pull all values $rename Rename field $bit Bitwise update of field
  45. 45. db.people.count() db.people.count({name: “Alex”})
  46. 46. db.people.distinct(‘name’) db.people.distinct(‘name’, {age: { $lte: 25}})
  47. 47. No joins? 1. Embed 2. Separate collection + double query
  48. 48. Embed { comments: [ { text: “Awesome dude!” }, { text: “Totally radical” } ] }
  49. 49. Embed + Keeps everything together (pre-joining) - Harder to query 16mb hard limit on document size
  50. 50. Double query > db.post.find({id: 123}) > db.comments.find({post_id: 123})
  51. 51. Double query + Don’t need to worry about hard limit + Much easier querying +/- Double query
  52. 52. Some untruths “MongoDB is not single server durable” “MongoDB will lose my data because it is not ACID compliant” “I need 12 terabytes of RAM to use MongoDB” “MongoDB is just CouchDB but with more marketing weight behind it”
  53. 53. How we use MongoDB AD Blackboard BP Nucleus CMIS Estates
  54. 54. How we use MongoDB .xml .json .csv .rdfxml Nucleus .tutle .n3 .ntriples .kml
  55. 55. Appropriate Use Caes Logs Data warehousing / archiving Location based apps (Foursquare / o2 Priorities) Ecommerce (with RDBMS for billing) Gaming Real time stats
  56. 56. Less well suited use cases Tractional systems Epic join based query based systems
  57. 57. CodeIgniter and MongoDB CodeIgniter library - http://lncn.eu/fmy5 Follows the query builder (active record) database library Version 2.0 almost finished
  58. 58. CodeIgniter and Mongo $this->mongo_db ->select(array(‘name’, ‘age’)) ->where_lte(‘age’, 25) ->where_in(‘interests’, array(‘PHP, ‘MongoDB’)) ->get(‘people’);
  59. 59. CodeIgniter Library v2.0 Multiple database support Epic code clean up Remove CodeIgniter-only functions so can be used in other frameworks or vanilla PHP Supports new MongoDB 2.0+ features
  60. 60. Where can I find out more? mongodb.com groups.google.com/group/mongodb-user irc://irc.freenode.net/#mongodb blog.boxedice.com cookbook.mongodb.com 10gen.com/events
  61. 61. Thanks

Notas

  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • ×