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

What's hot (20)

PDF
MySQL Shell for DBAs
Frederic Descamps
 
PPT
Database performance tuning and query optimization
Dhani Ahmad
 
PPTX
Database System Architectures
Information Technology
 
PPTX
Sqlite
Raghu nath
 
PPT
MySql slides (ppt)
webhostingguy
 
PPT
Introduction to mongodb
neela madheswari
 
PDF
Deep dive into PostgreSQL statistics.
Alexey Lesovsky
 
PPTX
Non relational databases-no sql
Ram kumar
 
PPTX
Schema migrations in no sql
Dr-Dipali Meher
 
PDF
Percona Live 2022 - MySQL Architectures
Frederic Descamps
 
PPT
Oracle archi ppt
Hitesh Kumar Markam
 
PDF
MariaDB 10.11 key features overview for DBAs
Federico Razzoli
 
PPTX
Indexing with MongoDB
MongoDB
 
PPT
Hive(ppt)
Abhinav Tyagi
 
PDF
Database System Architecture
Vignesh Saravanan
 
PPT
Oracle backup and recovery
Yogiji Creations
 
DOC
Creating a Simple PHP and MySQL-Based Login System
Azharul Haque Shohan
 
PPTX
Introduction to NoSQL Databases
Derek Stainer
 
DOCX
Mongo db report
Hyphen Call
 
PPT
Introduction to MongoDB
Ravi Teja
 
MySQL Shell for DBAs
Frederic Descamps
 
Database performance tuning and query optimization
Dhani Ahmad
 
Database System Architectures
Information Technology
 
Sqlite
Raghu nath
 
MySql slides (ppt)
webhostingguy
 
Introduction to mongodb
neela madheswari
 
Deep dive into PostgreSQL statistics.
Alexey Lesovsky
 
Non relational databases-no sql
Ram kumar
 
Schema migrations in no sql
Dr-Dipali Meher
 
Percona Live 2022 - MySQL Architectures
Frederic Descamps
 
Oracle archi ppt
Hitesh Kumar Markam
 
MariaDB 10.11 key features overview for DBAs
Federico Razzoli
 
Indexing with MongoDB
MongoDB
 
Hive(ppt)
Abhinav Tyagi
 
Database System Architecture
Vignesh Saravanan
 
Oracle backup and recovery
Yogiji Creations
 
Creating a Simple PHP and MySQL-Based Login System
Azharul Haque Shohan
 
Introduction to NoSQL Databases
Derek Stainer
 
Mongo db report
Hyphen Call
 
Introduction to MongoDB
Ravi Teja
 

Viewers also liked (6)

PDF
Business considerations for node.js applications
Aspenware
 
KEY
Getting Started with MongoDB and Node.js
Grant Goodale
 
PPTX
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
SpringPeople
 
PPTX
MongoDB-Beginner tutorial explaining basic operation via mongo shell
Priti Solanki
 
PDF
Intro To MongoDB
Alex Sharp
 
Business considerations for node.js applications
Aspenware
 
Getting Started with MongoDB and Node.js
Grant Goodale
 
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
SpringPeople
 
MongoDB-Beginner tutorial explaining basic operation via mongo shell
Priti Solanki
 
Intro To MongoDB
Alex Sharp
 
Ad

Similar to Intro To Mongo Db (20)

PPT
Tech Gupshup Meetup On MongoDB - 24/06/2016
Mukesh Tilokani
 
ODP
MongoDB - A Document NoSQL Database
Ruben Inoto Soto
 
PDF
MongoDB
techwhizbang
 
PPTX
Webinar: Building Your First MongoDB App
MongoDB
 
PPT
Mongo db basics
Dhaval Mistry
 
PDF
The emerging world of mongo db csp
Carlos Sánchez Pérez
 
KEY
MongoDB at CodeMash 2.0.1.0
Mike Dirolf
 
PPT
9. Document Oriented Databases
Fabio Fumarola
 
PPTX
MongoDB Knowledge share
Mr Kyaing
 
PDF
Building your first app with mongo db
MongoDB
 
PPTX
lecture_34e.pptx
janibashashaik25
 
PDF
MongoDB.pdf
KuldeepKumar778733
 
PDF
Mongodb Introduction
Raghvendra Parashar
 
KEY
MongoDB Strange Loop 2009
Mike Dirolf
 
PPTX
introtomongodb
saikiran
 
PPTX
Mongo db
Gyanendra Yadav
 
PDF
Quick overview on mongo db
Eman Mohamed
 
KEY
Introduction to MongoDB
Alex Bilbie
 
PDF
Building your first app with MongoDB
Norberto Leite
 
Tech Gupshup Meetup On MongoDB - 24/06/2016
Mukesh Tilokani
 
MongoDB - A Document NoSQL Database
Ruben Inoto Soto
 
MongoDB
techwhizbang
 
Webinar: Building Your First MongoDB App
MongoDB
 
Mongo db basics
Dhaval Mistry
 
The emerging world of mongo db csp
Carlos Sánchez Pérez
 
MongoDB at CodeMash 2.0.1.0
Mike Dirolf
 
9. Document Oriented Databases
Fabio Fumarola
 
MongoDB Knowledge share
Mr Kyaing
 
Building your first app with mongo db
MongoDB
 
lecture_34e.pptx
janibashashaik25
 
MongoDB.pdf
KuldeepKumar778733
 
Mongodb Introduction
Raghvendra Parashar
 
MongoDB Strange Loop 2009
Mike Dirolf
 
introtomongodb
saikiran
 
Mongo db
Gyanendra Yadav
 
Quick overview on mongo db
Eman Mohamed
 
Introduction to MongoDB
Alex Bilbie
 
Building your first app with MongoDB
Norberto Leite
 
Ad

Recently uploaded (20)

PDF
Modern Decentralized Application Architectures.pdf
Kalema Edgar
 
PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PPTX
Securing Model Context Protocol with Keycloak: AuthN/AuthZ for MCP Servers
Hitachi, Ltd. OSS Solution Center.
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PPTX
Digital Circuits, important subject in CS
contactparinay1
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
PPTX
Essential Content-centric Plugins for your Website
Laura Byrne
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
99 Bottles of Trust on the Wall — Operational Principles for Trust in Cyber C...
treyka
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
PPTX
Manual Testing for Accessibility Enhancement
Julia Undeutsch
 
Modern Decentralized Application Architectures.pdf
Kalema Edgar
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
Securing Model Context Protocol with Keycloak: AuthN/AuthZ for MCP Servers
Hitachi, Ltd. OSS Solution Center.
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Digital Circuits, important subject in CS
contactparinay1
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
Essential Content-centric Plugins for your Website
Laura Byrne
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
99 Bottles of Trust on the Wall — Operational Principles for Trust in Cyber C...
treyka
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
Dev Dives: Accelerating agentic automation with Autopilot for Everyone
UiPathCommunity
 
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
Manual Testing for Accessibility Enhancement
Julia Undeutsch
 

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