Building Your First App: An Introduction to MongoDB

  • Published on
    12-May-2015

  • View
    970

  • Download
    0

Embed Size (px)

Transcript

<ul><li>1.#MongoDBDays Building Your First App: An Introduction toMongoDBBrandon BlackSoftware Engineer, 10gen@brandonmblack</li></ul> <p>2. What is MongoDB? 3. MongoDB is a ___________database Document Open source High performance Horizontally scalable Full featured 4. Document Database Not for .PDF &amp; .DOC files A document is essentially an associative array Document == JSON object Document == PHP Array Document == Python Dict Document == Ruby Hash 5. Open Source MongoDB is an open source project On GitHub Licensed under the AGPL Started &amp; sponsored by 10gen Commercial licenses available Contributions welcome 6. High Performance Written in C++ Extensive use of memory-mapped files i.e. read-through write-through memory caching. Runs nearly everywhere Data serialized as BSON (fast parsing) Full support for primary &amp; secondary indexes Document model = less work 7. Horizontally Scalable 8. Full Featured Ad Hoc queries Real time aggregation Rich query capabilities Traditionally consistent Geospatial features Support for most programming languages Flexible schema 9. Database Landscape 10. http://www.mongodb.org/downloads 11. Mongo Shell 12. Document Database 13. RDBMSMongoDBTable, View CollectionRow DocumentIndex IndexJoin Embedded DocumentForeign Key ReferencePartition ShardTerminology 14. Typical (relational) ERD 15. MongoDB ERD 16. Library ManagementApplication http://www.flickr.com/photos/somegeekintn/3484353131/ 17. First step in any application isDetermine your entities 18. Library Management ApplicationEntities Library Patrons (users) Books (catalog) Authors Publishers Categories ?? 19. In a relational based appWe would start by doingschema design 20. Relational Schema Design Large ERD Diagrams Complex create table statements ORMs to map tables to objects Tables just to join tables together For this simple app wed have 5 tables and 5 join tables Lots of revisions until we get it just right 21. In a MongoDB based appWe start building ourand let the schema evolveapp 22. MongoDB Collections Users Books Authors Publishers 23. No Common LanguageMongo Shell 24. Working with MongoDB 25. Start with an Object(or array, hash, dict, etc)user = {username: fred.jones,first_name: fred,last_name: jones,} 26. Insert the Record&gt; db.users.insert(user)No collection creationneeded 27. Querying for the User&gt; db.users.findOne(){"_id" : ObjectId("50804d0bd94ccab2da652599"),"username" : "fred.jones","first_name" : "fred","last_name" : "jones"} 28. _id _id is the primary key in MongoDB Automatically indexed Automatically created as an ObjectId if not provided Any unique immutable value could be used 29. ObjectId ObjectId is a special 12 byte value Guaranteed to be unique across your cluster ObjectId("50804d0bd94ccab2da652599") |-------------||---------||-----||----------| tsmac pid inc 30. Creating an Author&gt; db.author.insert({ first_name: j.r.r., last_name: tolkien, bio: J.R.R. Tolkien (1892.1973), beloved throughout theworld as the creator of The Hobbit and The Lord of the Rings, was aprofessor of Anglo-Saxon at Oxford, a fellow of Pembroke College,and a fellow of Merton College until his retirement in 1959. His chiefinterest was the linguistic aspects of the early English writtentradition, but even as he studied these classics he was creating aset of his own.}) 31. Querying for Our Author&gt; db.author.findOne( { last_name : tolkien } ){"_id" : ObjectId("507ffbb1d94ccab2da652597"),"first_name" : "j.r.r.","last_name" : "tolkien","bio" : "J.R.R. Tolkien (1892.1973), beloved throughout the worldas the creator of The Hobbit and The Lord of the Rings, was aprofessor of Anglo-Saxon at Oxford, a fellow of Pembroke College,and a fellow of Merton College until his retirement in 1959. His chiefinterest was the linguistic aspects of the early English writtentradition, but even as he studied these classics he was creating aset of his own."} 32. Creating a Book&gt; db.books.insert({ title: fellowship of the ring, the, author: ObjectId("507ffbb1d94ccab2da652597"), language: english, genre: [fantasy, adventure], publication: {name: george allen &amp; unwin,location: London,date: new Date(21 July 1954), }}) http://society6.com/PastaSoup/The-Fellowship-of-the-Ring-ZZc_Print/ 33. Multiple Values Per Key&gt; db.books.findOne({language: english}, {genre: 1}){"_id" : ObjectId("50804391d94ccab2da652598"),"genre" : ["fantasy","adventure"]} 34. Multiple Values Per Key&gt; db.books.findOne({genre: fantasy}, {title: 1}){"_id" : ObjectId("50804391d94ccab2da652598"),"title" : "fellowship of the ring, the"}Query key with single value ormultiple values the same way. 35. Nested Values&gt; db.books.findOne({}, {publication: 1}){"_id" : ObjectId("50804ec7d94ccab2da65259a"),"publication" : {"name" : "george allen &amp; unwin","location" : "London","date" : ISODate("1954-07-21T04:00:00Z")}} 36. Query Nested Values withDot Notation&gt; db.books.findOne({publication.date :{ $lt : new Date(21 June 1960)}}){"_id" : ObjectId("50804391d94ccab2da652598"),"title" : "fellowship of the ring, the","author" : ObjectId("507ffbb1d94ccab2da652597"),"language" : "english","genre" : [ "fantasy", "adventure" ],"publication" : {"name" : "george allen &amp; unwin","location" : "London","date" : ISODate("1954-07-21T04:00:00Z")}} 37. Update Books&gt; db.books.update( {"_id" : ObjectId("50804391d94ccab2da652598")}, {$set : {isbn: 0547928211,pages: 432} }) This is true agile development . Im simply changing how I work with the data, and the database follows. 38. Updated Book Recorddb.books.findOne(){"_id" : ObjectId("50804ec7d94ccab2da65259a"),"author" : ObjectId("507ffbb1d94ccab2da652597"),"genre" : [ "fantasy", "adventure" ],"isbn" : "0395082544","language" : "english","pages" : 432,"publication" : {"name" : "george allen &amp; unwin","location" : "London","date" : ISODate("1954-07-21T04:00:00Z")},"title" : "fellowship of the ring, the"} 39. Creating Indexes&gt; db.books.ensureIndex({title: 1})&gt; db.books.ensureIndex({genre : 1})&gt; db.books.ensureIndex({publication.date: -1}) 40. Query with RegularExpressions&gt; db.books.findOne({title : /^fell/}){"_id" : ObjectId("50804ec7d94ccab2da65259a"),"author" : ObjectId("507ffbb1d94ccab2da652597"),"genre" : [ "fantasy", "adventure" ],"isbn" : "0395082544","language" : "english","pages" : 432,"publication" : {"name" : "george allen &amp; unwin","location" : "London","date" : ISODate("1954-07-21T04:00:00Z")},"title" : "fellowship of the ring, the"} 41. Adding More Books&gt; db.books.insert({ title: two towers, the, author: ObjectId("507ffbb1d94ccab2da652597"), language: english, isbn : "034523510X", genre: [fantasy, adventure], pages: 447, publication: {name: george allen &amp; unwin,location: London,date: new Date(11 Nov 1954), }}) http://society6.com/PastaSoup/The-Two-Towers-XTr_Print/ 42. Adding More Books&gt; db.books.insert({ title: return of the king, the, author: ObjectId("507ffbb1d94ccab2da652597"), language: english, isbn : "0345248295", genre: [fantasy, adventure], pages: 544, publication: {name: george allen &amp; unwin,location: London,date: new Date(20 Oct 1955), }}) http://society6.com/PastaSoup/The-Return-of-the-King-Jsc_Print/ 43. Cursors&gt; db.books.find({ author: ObjectId("507ffbb1d94ccab2da652597")}).sort({ publication.date : -1}).limit(1){"_id" : ObjectId("5080d33ed94ccab2da65259d"),"title" : "return of the king, the","author" : ObjectId("507ffbb1d94ccab2da652597"),"language" : "english","isbn" : "0345248295","genre" : [ "fantasy", "adventure" ],"pages" : 544,"publication" : {"name" : "george allen &amp; unwin","location" : "London","date" : ISODate("1955-10-20T04:00:00Z")}} 44. Simple Pagerpage_num = 3;results_per_page = 10;cursor =db.books.find() .sort({ "publication.date" : -1 }).skip((page_num - 1) * results_per_page).limit(results_per_page); 45. Finding an Author by Book&gt; book = db.books.findOne({"title" : "return of the king, the"})&gt; db.author.findOne({_id: book.author}){ "_id" : ObjectId("507ffbb1d94ccab2da652597"), "first_name" : "j.r.r.", "last_name" : "tolkien", "bio" : "J.R.R. Tolkien (1892.1973), beloved throughout the world asthe creator of The Hobbit and The Lord of the Rings, was a professor ofAnglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow ofMerton College until his retirement in 1959. His chief interest was thelinguistic aspects of the early English written tradition, but even as hestudied these classics he was creating a set of his own."} 46. MongoDB Drivers 47. Real applications are notbuilt in the shell 48. MongoDB Drivers Drivers connect to mongo servers Drivers translate BSON into native types The MongoDB shell is not a driver, but works like one in some ways Installed using typical means (npm, pecl, gem, pip) 49. MongoDB has nativebindings for over 12languages 50. Next Steps 51. Weve introduced a lot ofconcepts here 52. Schema Design @ 10:35am 53. Indexing @ 12:15pm 54. Replication @ 1:45pm 55. Sharding @ 2:30pm 56. Whats next? Schema Design @ 10:35am Indexing @ 12:15pm Replication @ 1:45pm Sharding @ 2:30pm Webinar: Technical Overview of MongoDB (March 7th) MongoDB User Group Resources https://education.10gen.com/ http://www.10gen.com/presentations http://github.com/brandonblack/presentations 57. #MongoDBDaysThank YouBrandon BlackSoftware Engineer, 10gen@brandonmblack </p>