SlideShare a Scribd company logo
Chris Kitechriskite.comIntro to MongoDB
In This Talk…What is MongoDB?Why use it?Documents and CollectionsQueryingJavaScript ShellSchema Design
What is MongoDB?
Not a RDBMSMongo is not a relational database like MySQLNo transactionsNo referential integrityNo joinsNo schema, so no columns or rowsNoSQL
Not a Key-Value StoreMongo is not simply a key-value store like RedisStores structured dataRich query interfaceIndexesMap/ReduceAutomatic sharding, GridFS, geospatial indexing, etc.
Document-oriented DatabaseRecords are JSON documents (actually BSON)Stored in collectionsNo predefined schemaDocs in the same collection don’t even need to have the same fieldsAtomic in-place operators for contention-free updates$set, $inc, $push, $pop, etc.
Mongo Documentuser = {	 name: "Frank Furter",	 occupation: "A scientist",	 location: "Transylvania"  }
Why Use MongoDB?
It’s Stupid Fast!Anywhere from 2 to 10 times faster than MySQLDepends on which contrived benchmark you’re looking atHere’s one I just made up:
It’s Stupid Fast!About 50 times faster than CouchDBAccording to http://www.idiotsabound.com/did-i-mention-mongodb-is-fast-way-to-go-mongo2 important points:It’s pretty quickBenchmarks are worthless unless you do them on your actual workload
It’s Web Scale!Sharding built-in, automatic, and *Just Works™*Just Works™ guarantee applies only if you have a cluster of shard replica sets with config servers and routing servers and you define your own shard key(s) with appropriate uniformity and granularityAsynchronous replication for failover and redundancy
It’s Pretty PainlessSchemalessNo more configuring database columns with typesNo more defining and managing migrationsJust stick your data in there, it’s fineNoSQLORMs exist mostly because writing SQL sucksMongo’s query language is basically JSONThe Mongo driver for your favorite language is really nice and officially supportedHandy JavaScript shell for the CLI
It’s Pretty PainlessMySQL/* First go create the database, the table, the schema, etc. */mysql_connect("localhost", "username", "password") or die(mysql_error());mysql_select_db("test") or die(mysql_error());$sql = "INSERT INTO users (name, age) VALUES ('Janet', 23)";mysql_query($sql);$result = mysql_query("SELECT * FROM users WHERE age = 23");$row = mysql_fetch_assoc($result);echo "Oh, " . $row['name'] . "!"; // prints "Oh, Janet!"MongoDB$mongo = new Mongo(); // defaults to localhost with no auth$users = $mongo->test_db->users; // database and collection created implicitly$users->insert( array('name' => 'Brad', 'age' => 25) );$user = $users->findOne( array('age' => 25) );echo "Oh, " . $user->name . "!"; // prints "Oh, Brad!"
All the Cool Kids Are Doing Ithttp://www.mongodb.org/display/DOCS/Production+Deployments
Documents and Collections
Documents and CollectionsDocuments are the recordsLike objects in OOP, or rows in RDBMSCollections are groups of documentsUsually represent a top-level class in your appHeterogeneous setUnlike RDBMS tables, no predefined schemaNo foreign keys, so how do we reference other objects?Don't! Just embed the sub-item in the parent docOr, use a key for references and deal with the fact that you don't get integrity or joins
Embedded ObjectsDocuments can embed other documentsUsed to efficiently represent a relationFor example:{  name: 'Brad Majors', address:    {     street: 'Oak Terrace',     city: 'Denton'   }}
Querying
QueriesQueries are documentsQuery expression objects indicate a pattern to matchdb.users.find( {last_name: 'Smith'} )Several query objects for advanced queriesdb.users.find( {age: {$gte: 23} } )db.users.find( {age: {$in: [23,25]} } )
Querying Embedded ObjectsExact match an entire embedded objectdb.users.find( {address: {street: 'Oak Terrace', city: 'Denton'}} )Dot-notation for a partial matchdb.users.find( {"address.city": 'Denton'} )
JavaScript Shell
JS ShellComes with MongoDBLaunch it with 'mongo' on the command-lineTry a simplified version at http://www.mongodb.org/Great fit since Mongo docs are basically JSON
Live DemoIf the tech demo gods allow it
Schema Design
I thought you said no schema?There is no predefined schemaYour application creates an ad-hoc schema with the objects it createsThe schema is implicit in the queries your application runs
Schema DesignUse collections to represent the top-level classes of your applicationBut don't just make a collection for every object typeThese aren't like tables in an RDBMSLess normalization, more embedding
Obligatory Blog Post ExampleA blog post has an author, some text, and many commentsThe comments are unique per post, but one author has many postsHow would you design this in SQL?Let's look at how we might design it in Mongo
Bad Schema Design: ReferencesCollections for posts, authors, and commentsReferences by manually created IDpost = { id: 150, author: 100, text: 'This is a pretty awesome post.', comments: [100, 105, 112]}author = { id: 100, name: 'Michael Arrington' posts: [150]}comment = { id: 105, text: 'Whatever this sux.'}
Better Schema Design: EmbeddingCollection for postsEmbed comments, author namepost = { author: 'Michael Arrington', text: 'This is a pretty awesome post.', comments: [            'Whatever this post sux.',             'I agree, lame!'           ]}
BenefitsEmbedded objects brought back in the same query as parent objectOnly 1 trip to the DB server requiredObjects in the same collection are generally stored contiguously on diskSpatial locality = fasterIf the document model matches your domain well, it can be much easier to comprehend than nasty joins
IndexesMongo supports indexes to greatly improve query performanceNo need to create in advanceCreate idempotent indexes in your app with "ensure_index"
Schema Design LimitationsNo referential integrityHigh degree of denormalization means updating something in many places instead of oneLack of predefined schema is a double-edged swordHopefully you have a model in your appObjects within a collection can be completely inconsistent in their fields
Final Thoughts
Final ThoughtsMongoDB is fast no matter how you slice itIt achieves high performance by literally playing fast and loose with your dataThat's not necessarily a bad thing, just a tradeoffVery rapid development, open sourceDocument model is simple but powerfulAdvanced features like map/reduce, geospatial indexing etc. are very compellingSurprisingly great drivers for most languages
Questions?
Thanks!These slides are online:http://bit.ly/intro_to_mongo

More Related Content

PPTX
Introduction to Oracle Data Guard Broker
PDF
Understanding oracle rac internals part 2 - slides
PDF
PostgreSQL Tutorial for Beginners | Edureka
PPTX
Basics of MongoDB
PDF
PostgreSQL WAL for DBAs
PDF
One PDB to go, please!
PDF
Postgresql database administration volume 1
PPTX
MongoDB
Introduction to Oracle Data Guard Broker
Understanding oracle rac internals part 2 - slides
PostgreSQL Tutorial for Beginners | Edureka
Basics of MongoDB
PostgreSQL WAL for DBAs
One PDB to go, please!
Postgresql database administration volume 1
MongoDB

What's hot (20)

PDF
DB Time, Average Active Sessions, and ASH Math - Oracle performance fundamentals
PPTX
PDF
MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...
PPT
Sql Server Basics
PDF
PPTX
Introduction to PostgreSQL
PDF
Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...
PDF
Linux tuning to improve PostgreSQL performance
PPTX
Mongodb basics and architecture
PPTX
Modeling with Document Database: 5 Key Patterns
PDF
How queries work with sharding
PDF
Oracle statistics by example
PPTX
Oracle DBA
PDF
The Great Debate: PostgreSQL vs MySQL
 
PDF
ProxySQL High Avalability and Configuration Management Overview
PPTX
Mongo db intro.pptx
PPS
Oracle Database Overview
PDF
Oracle Database SQL Tuning Concept
PPTX
PostgreSQL Database Slides
PDF
[Pgday.Seoul 2020] SQL Tuning
DB Time, Average Active Sessions, and ASH Math - Oracle performance fundamentals
MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...
Sql Server Basics
Introduction to PostgreSQL
Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...
Linux tuning to improve PostgreSQL performance
Mongodb basics and architecture
Modeling with Document Database: 5 Key Patterns
How queries work with sharding
Oracle statistics by example
Oracle DBA
The Great Debate: PostgreSQL vs MySQL
 
ProxySQL High Avalability and Configuration Management Overview
Mongo db intro.pptx
Oracle Database Overview
Oracle Database SQL Tuning Concept
PostgreSQL Database Slides
[Pgday.Seoul 2020] SQL Tuning
Ad

Viewers also liked (7)

PDF
Business considerations for node.js applications
KEY
Getting Started with MongoDB and Node.js
PPTX
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
PPTX
MongoDB-Beginner tutorial explaining basic operation via mongo shell
PDF
Intro To MongoDB
PPT
Introduction to MongoDB
Business considerations for node.js applications
Getting Started with MongoDB and Node.js
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
MongoDB-Beginner tutorial explaining basic operation via mongo shell
Intro To MongoDB
Introduction to MongoDB
Ad

Similar to Intro To Mongo Db (20)

PPT
Tech Gupshup Meetup On MongoDB - 24/06/2016
ODP
MongoDB - A Document NoSQL Database
PDF
MongoDB
PPTX
Webinar: Building Your First MongoDB App
PPT
Mongo db basics
PDF
The emerging world of mongo db csp
KEY
MongoDB at CodeMash 2.0.1.0
PPT
9. Document Oriented Databases
PPTX
MongoDB Knowledge share
PDF
Building your first app with mongo db
PPTX
lecture_34e.pptx
PDF
MongoDB.pdf
PDF
Mongodb Introduction
KEY
MongoDB Strange Loop 2009
PPTX
introtomongodb
PPTX
Mongo db
PDF
Quick overview on mongo db
KEY
Introduction to MongoDB
PDF
Building your first app with MongoDB
Tech Gupshup Meetup On MongoDB - 24/06/2016
MongoDB - A Document NoSQL Database
MongoDB
Webinar: Building Your First MongoDB App
Mongo db basics
The emerging world of mongo db csp
MongoDB at CodeMash 2.0.1.0
9. Document Oriented Databases
MongoDB Knowledge share
Building your first app with mongo db
lecture_34e.pptx
MongoDB.pdf
Mongodb Introduction
MongoDB Strange Loop 2009
introtomongodb
Mongo db
Quick overview on mongo db
Introduction to MongoDB
Building your first app with MongoDB

Recently uploaded (20)

PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
1. Introduction to Computer Programming.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
Big Data Technologies - Introduction.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Spectroscopy.pptx food analysis technology
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Tartificialntelligence_presentation.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Empathic Computing: Creating Shared Understanding
PDF
cuic standard and advanced reporting.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
NewMind AI Weekly Chronicles - August'25-Week II
1. Introduction to Computer Programming.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Diabetes mellitus diagnosis method based random forest with bat algorithm
Building Integrated photovoltaic BIPV_UPV.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Big Data Technologies - Introduction.pptx
MIND Revenue Release Quarter 2 2025 Press Release
Spectral efficient network and resource selection model in 5G networks
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Spectroscopy.pptx food analysis technology
Machine learning based COVID-19 study performance prediction
Tartificialntelligence_presentation.pptx
20250228 LYD VKU AI Blended-Learning.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
Empathic Computing: Creating Shared Understanding
cuic standard and advanced reporting.pdf

Intro To Mongo Db

  • 2. In This Talk…What is MongoDB?Why use it?Documents and CollectionsQueryingJavaScript ShellSchema Design
  • 4. Not a RDBMSMongo is not a relational database like MySQLNo transactionsNo referential integrityNo joinsNo schema, so no columns or rowsNoSQL
  • 5. Not a Key-Value StoreMongo is not simply a key-value store like RedisStores structured dataRich query interfaceIndexesMap/ReduceAutomatic sharding, GridFS, geospatial indexing, etc.
  • 6. Document-oriented DatabaseRecords are JSON documents (actually BSON)Stored in collectionsNo predefined schemaDocs in the same collection don’t even need to have the same fieldsAtomic in-place operators for contention-free updates$set, $inc, $push, $pop, etc.
  • 7. Mongo Documentuser = { name: "Frank Furter", occupation: "A scientist", location: "Transylvania" }
  • 9. It’s Stupid Fast!Anywhere from 2 to 10 times faster than MySQLDepends on which contrived benchmark you’re looking atHere’s one I just made up:
  • 10. It’s Stupid Fast!About 50 times faster than CouchDBAccording to http://www.idiotsabound.com/did-i-mention-mongodb-is-fast-way-to-go-mongo2 important points:It’s pretty quickBenchmarks are worthless unless you do them on your actual workload
  • 11. It’s Web Scale!Sharding built-in, automatic, and *Just Works™*Just Works™ guarantee applies only if you have a cluster of shard replica sets with config servers and routing servers and you define your own shard key(s) with appropriate uniformity and granularityAsynchronous replication for failover and redundancy
  • 12. It’s Pretty PainlessSchemalessNo more configuring database columns with typesNo more defining and managing migrationsJust stick your data in there, it’s fineNoSQLORMs exist mostly because writing SQL sucksMongo’s query language is basically JSONThe Mongo driver for your favorite language is really nice and officially supportedHandy JavaScript shell for the CLI
  • 13. It’s Pretty PainlessMySQL/* First go create the database, the table, the schema, etc. */mysql_connect("localhost", "username", "password") or die(mysql_error());mysql_select_db("test") or die(mysql_error());$sql = "INSERT INTO users (name, age) VALUES ('Janet', 23)";mysql_query($sql);$result = mysql_query("SELECT * FROM users WHERE age = 23");$row = mysql_fetch_assoc($result);echo "Oh, " . $row['name'] . "!"; // prints "Oh, Janet!"MongoDB$mongo = new Mongo(); // defaults to localhost with no auth$users = $mongo->test_db->users; // database and collection created implicitly$users->insert( array('name' => 'Brad', 'age' => 25) );$user = $users->findOne( array('age' => 25) );echo "Oh, " . $user->name . "!"; // prints "Oh, Brad!"
  • 14. All the Cool Kids Are Doing Ithttp://www.mongodb.org/display/DOCS/Production+Deployments
  • 16. Documents and CollectionsDocuments are the recordsLike objects in OOP, or rows in RDBMSCollections are groups of documentsUsually represent a top-level class in your appHeterogeneous setUnlike RDBMS tables, no predefined schemaNo foreign keys, so how do we reference other objects?Don't! Just embed the sub-item in the parent docOr, use a key for references and deal with the fact that you don't get integrity or joins
  • 17. Embedded ObjectsDocuments can embed other documentsUsed to efficiently represent a relationFor example:{ name: 'Brad Majors', address: { street: 'Oak Terrace', city: 'Denton' }}
  • 19. QueriesQueries are documentsQuery expression objects indicate a pattern to matchdb.users.find( {last_name: 'Smith'} )Several query objects for advanced queriesdb.users.find( {age: {$gte: 23} } )db.users.find( {age: {$in: [23,25]} } )
  • 20. Querying Embedded ObjectsExact match an entire embedded objectdb.users.find( {address: {street: 'Oak Terrace', city: 'Denton'}} )Dot-notation for a partial matchdb.users.find( {"address.city": 'Denton'} )
  • 22. JS ShellComes with MongoDBLaunch it with 'mongo' on the command-lineTry a simplified version at http://www.mongodb.org/Great fit since Mongo docs are basically JSON
  • 23. Live DemoIf the tech demo gods allow it
  • 25. I thought you said no schema?There is no predefined schemaYour application creates an ad-hoc schema with the objects it createsThe schema is implicit in the queries your application runs
  • 26. Schema DesignUse collections to represent the top-level classes of your applicationBut don't just make a collection for every object typeThese aren't like tables in an RDBMSLess normalization, more embedding
  • 27. Obligatory Blog Post ExampleA blog post has an author, some text, and many commentsThe comments are unique per post, but one author has many postsHow would you design this in SQL?Let's look at how we might design it in Mongo
  • 28. Bad Schema Design: ReferencesCollections for posts, authors, and commentsReferences by manually created IDpost = { id: 150, author: 100, text: 'This is a pretty awesome post.', comments: [100, 105, 112]}author = { id: 100, name: 'Michael Arrington' posts: [150]}comment = { id: 105, text: 'Whatever this sux.'}
  • 29. Better Schema Design: EmbeddingCollection for postsEmbed comments, author namepost = { author: 'Michael Arrington', text: 'This is a pretty awesome post.', comments: [ 'Whatever this post sux.', 'I agree, lame!' ]}
  • 30. BenefitsEmbedded objects brought back in the same query as parent objectOnly 1 trip to the DB server requiredObjects in the same collection are generally stored contiguously on diskSpatial locality = fasterIf the document model matches your domain well, it can be much easier to comprehend than nasty joins
  • 31. IndexesMongo supports indexes to greatly improve query performanceNo need to create in advanceCreate idempotent indexes in your app with "ensure_index"
  • 32. Schema Design LimitationsNo referential integrityHigh degree of denormalization means updating something in many places instead of oneLack of predefined schema is a double-edged swordHopefully you have a model in your appObjects within a collection can be completely inconsistent in their fields
  • 34. Final ThoughtsMongoDB is fast no matter how you slice itIt achieves high performance by literally playing fast and loose with your dataThat's not necessarily a bad thing, just a tradeoffVery rapid development, open sourceDocument model is simple but powerfulAdvanced features like map/reduce, geospatial indexing etc. are very compellingSurprisingly great drivers for most languages
  • 36. Thanks!These slides are online:http://bit.ly/intro_to_mongo