Building your first app with mongo db

  • Published on

  • View

  • Download

Embed Size (px)




<ul><li> 1. #MongoDBDays Building your rst app; an introduction to MongoDB Thomas Rckstie Technical Services Engineer, MongoDB </li> <li> 2. Notes to the Presenter Themes for this presentation: First presentation in the conference. Keep it fun User is likely brand new to MongoDB and comes from traditional relational background This is an introduction. Don't go deep.. Introduce concepts and refer to later presentations that build on these concepts. </li> <li> 3. What is MongoDB? </li> <li> 4. MongoDB is a ___________ database Document Open source High performance Horizontally scalable Full featured </li> <li> 5. Document Database Not for .PDF &amp; .DOC les A document is essentially an associative array with key/value pairs (possibly nested) { username : thomas.r", num_logins : 39, last_login : ISODate("2013-10-08T16:46:21Z"), permissions : ["read", "write", "list", "admin"], company : { name : "MongoDB, Inc." location : "Sydney, Australia" } } </li> <li> 6. Open Source MongoDB is an open source project On GitHub Licensed under the AGPL Started &amp; sponsored by 10gen (now MongoDB, Inc.) Commercial licenses available Contributions welcome </li> <li> 7. High Performance Written in C++ Extensive use of memory-mapped les 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 </li> <li> 8. Horizontally Scalable Shard 1 Shard 2 Shard 3 Horizontally Scalable Shard N </li> <li> 9. Full Featured Ad Hoc queries Real time aggregation Rich query capabilities Strongly consistent Geospatial features Support for most programming languages Flexible schema </li> <li> 10. Scalability &amp; Performance Scalability &amp; Performance Database Landscape Memcached MongoDB RDBMS Depth of Functionality </li> <li> 11. </li> <li> 12. Running MongoDB $ tar z xvf mongodb-osx-x86_64-2.4.x.tgz $ cd mongodb-osx-i386-2.4.4/bin $ mkdir p /data/db $ ./mongod </li> <li> 13. Mongo Shell $ mongo MongoDB shell version: 2.4.4 connecting to: test &gt; db.test.insert( { text: 'Welcome to MongoDB } ) &gt; db.test.find().pretty() { "_id" : ObjectId("51c34130fbd5d7261b4cdb55"), "text" : "Welcome to MongoDB" } </li> <li> 14. Document Database </li> <li> 15. Terminology RDBMS MongoDB Table, View Collection Row Document Index Index Join Embedded Document Foreign Key Reference Partition Shard </li> <li> 16. Lets Build a Blog </li> <li> 17. First step in any application is Determine your entities </li> <li> 18. Entities in our Blogging System Users Articles Comments Tags Categories ( ? ) </li> <li> 19. In a relational database app We would start by doing schema design </li> <li> 20. Typical (relational) ERD Category Name URL User Name Email address Article Name Slug Publish date Text Comment Comment Date Author Tag Name URL </li> <li> 21. Relational schema design Large ERD Diagrams Complex create table statements ORMs to map tables to objects Tables just to join tables together Lots of revisions until we get it right </li> <li> 22. In a MongoDB based app We start building our app and let the schema evolve </li> <li> 23. MongoDB ERD Article User Name Email address Name Slug Publish date Text Author Comment[] Comment Date Author Tag[] Value Category[] Value </li> <li> 24. Working With MongoDB </li> <li> 25. The Shell </li> <li> 26. Start with an object (or array, hash, dict, etc) &gt; var user = { username: thomas.r', first_name: Thomas', last_name: Rckstie', } </li> <li> 27. Insert the Record &gt; db test &gt; use blog switched to db blog // syntax is db.. &gt; db.users.insert( user ) No db/collection creation necessary </li> <li> 28. Retrieve the Record again // get one document (dont care which one) &gt; db.users.findOne() { "_id" : ObjectId("50804d0bd94ccab2da652599"), "username" : thomas.r", "first_name" : Thomas", "last_name" : Rckstie" } </li> <li> 29. _id _id is the primary key in MongoDB Any unique immutable value could be used Automatically created as an ObjectId if not provided Automatically indexed </li> <li> 30. ObjectId ObjectId is a special 12 byte value Guaranteed to be unique across your cluster ObjectId("50804d0bd94ccab2da652599") ts mac pid inc </li> <li> 31. Creating a Blog Article &gt; db.articles.insert( { title: Hello World, body: This is my first blog post, date: new Date(2013-06-20), username: thomas.r, tags: [adventure, mongodb], comments: [ ] }) </li> <li> 32. Finding the Article &gt; db.articles.find().pretty() { "_id" : ObjectId("51c3bafafbd5d7261b4cdb5a"), "title" : "Hello World", "body" : "This is my first blog post", "date" : ISODate("2013-06-20T00:00:00Z"), "username" : thomas.r", "tags" : [ "adventure", "mongodb" ], "comments" : [ ] } </li> <li> 33. Finding the Article &gt; db.articles.find( { _id : ObjectId("51c3bafafbd5d7261b4cdb5a") } ) .pretty() { "_id" : ObjectId("51c3bafafbd5d7261b4cdb5a"), "title" : "Hello World", "body" : "This is my first blog post", "date" : ISODate("2013-06-20T00:00:00Z"), "username" : thomas.r", "tags" : [ "adventure", "mongodb" ], "comments" : [ ] } </li> <li> 34. Querying An Array &gt; db.articles.find( { tags : 'adventure } ).pretty() { "_id" : ObjectId("51c3bcddfbd5d7261b4cdb5b"), "title" : "Hello World", "body" : "This is my first blog post", "date" : ISODate("2013-06-20T00:00:00Z"), "username" : thomas.r", "tags" : [ "adventure", "mongodb" ], "comments" : [ ] } </li> <li> 35. Using Update to Add a Comment // the syntax is: update ( what, how ) &gt; db.articles.update( { _id: ObjectId("51c3bcddfbd5d7261b4cdb5b) }, { "$push" : { "comments" : { "name" : "Steve Noname", "comment" : "Awesome Post" } } ) </li> <li> 36. Article with Comment Embedded &gt; db.articles.find( { username: thomas.r } ).pretty() { "_id" : ObjectId("51c3bcddfbd5d7261b4cdb5b"), "body" : "This is my first blog post", "comments" : [ { "name" : "Steve Noname", "comment" : "Awesome Post" } ], "date" : ISODate("2013-06-20T00:00:00Z"), "tags" : [ "adventure", "mongodb" ], "title" : "Hello World", "username" : thomas.r" } </li> <li> 37. Remove Comments / Articles // remove comment with $pull &gt; var last_comment = { "name" : "Steve Noname", "comment" : "Awesome Post } &gt; db.articles.update( { _id: ObjectId("51c3bcddfbd5d7261b4cdb5b") }, { $pull : { comments: last_comment } } ) // remove article &gt; db.articles.remove( { _id: ObjectId("51c3bcddfbd5d7261b4cdb5b") } ) </li> <li> 38. MongoDB Drivers </li> <li> 39. Real applications are not built in the shell </li> <li> 40. MongoDB has native bindings for over 12 languages </li> <li> 41. MongoDB Drivers Ofcial Support for 12 languages Community drivers for tons more Drivers connect to mongo servers Drivers translate BSON into native types mongo shell is not a driver, but works like one in some ways Installed using typical means (npm, pecl, gem, pip) </li> <li> 42. Learn more about MongoDB </li> <li> 43. Manual: </li> <li> 44. Online Training at MongoDB University </li> <li> 45. We've introduced a lot of concepts here </li> <li> 46. Schema Design @ 11:00 Article User Name Email address Name Slug Publish date Text Author Comment[] Comment Date Author Tag[] Value Category[] Value </li> <li> 47. Replication @ 11:50 Client Application Driver Re a d a Re d Write Secondary Primary Secondary </li> <li> 48. Sharding @ 14:00 </li> <li> 49. Indexing @ 15:50 7 1 2 5 6 16 9 12 18 21 </li> <li> 50. #MongoDBDays Questions ? Thomas Rckstie @tomonezero </li> </ul>