SlideShare uma empresa Scribd logo
1 de 58
MongoDB Miami February 7, 2013


Building your first app;
an introduction to
MongoDB
Robert Stam
Software Engineer, 10gen
What is MongoDB
MongoDB isa ___________
database
• Document
• Open source
• High performance
• Horizontally scalable
• Full featured
Document Database
• Not for .PDF & .DOC files
• A document is essentially an associative array
• Document == JSON object
• Document == PHP Array
• Document == Python Dict
• Document == Ruby Hash
• etc
Open Source
• MongoDB is an open source project
• On GitHub
• Licensed under the AGPL
• Started & sponsored by 10gen
• Commercial licenses available
• Contributions welcome
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 & secondary indexes
• Document model = less work
Horizontally Scalable
Full Featured
• Ad Hoc queries
• Real time aggregation
• Rich query capabilities
• Traditionally consistent
• Geospatial features
• Support for most programming languages
• Flexible schema
Database Landscape
http://www.mongodb.org/download
s
Mongo Shell
Document Database
RDBMS                MongoDB
Table, View   ➜   Collection
Row           ➜   Document
Index         ➜   Index
Join          ➜   Embedded Document
Foreign Key   ➜   Reference
Partition     ➜   Shard


Terminology
Typical (relational) ERD
MongoDB ERD
We will build a library
management application
        http://www.flickr.com/photos/somegeekintn/3484353131/
First step in any application is
Determine your entities
Library Management Application
Entities
• Library Patrons (users)
• Books (catalog)
• Authors
• Publishers
• Categories ??
In a relational based app
We would start by doing
schema design
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 we'd have 5 tables and 5 join
 tables
• Lots of revisions until we get it just right
In a MongoDB based app
We start building our
and let the schema evolve
app
MongoDB collections
• Users
• Books
• Authors
• Publishers
No common language
so using the shell
Working with MongoDB
Start with an object
(or array, hash, dict, etc)

user= {
username: 'fred.jones',
first_name: 'fred',
last_name: 'jones',
}
Insert the record

>db.users.insert(user)




                  No collection creation
                  needed
Querying for the user
>db.users.findOne()
{
"_id": ObjectId("50804d0bd94ccab2da652599"),
"username" : "fred.jones",
"first_name" : "fred",
"last_name" : "jones"
}
_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
ObjectId
• ObjectId is a special 12 byte value
• Guaranteed to be unique across your cluster
• ObjectId("50804d0bd94ccab2da652599")
 |-------------||---------||-----||----------|
 tsmacpidinc
Creating an author
>db.author.insert({
first_name: 'j.r.r.',
last_name: 'tolkien',
bio: 'J.R.R. Tolkien (1892.1973), beloved throughout the world as the
creator of The Hobbit and The Lord of the Rings, was a professor of
Anglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow
of Merton College until his retirement in 1959. His chief interest was
the linguistic aspects of the early English written tradition, but even
as he studied these classics he was creating a set of his own.'
})
Querying for our author
>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 world as
the creator of The Hobbit and The Lord of the Rings, was a
professor of Anglo-Saxon at Oxford, a fellow of Pembroke College,
and a fellow of Merton College until his retirement in 1959. His chief
interest was the linguistic aspects of the early English written
tradition, but even as he studied these classics he was creating a
set of his own."
}
Creating a Book
>db.books.insert({
            title: 'fellowship of the ring, the',
        author: ObjectId("507ffbb1d94ccab2da652597"),
language: 'english',
        genre: ['fantasy', 'adventure'],
        publication: {
                       name: 'georgeallen&unwin',
                location: 'London',
                       date: new Date('21 July 1954'),
        }
})

                                      http://society6.com/PastaSoup/The-Fellowship-of-the-Ring-ZZc_Print/
Multiple values per key
>db.books.findOne({language: 'english'}, {genre: 1})
{
"_id" : ObjectId("50804391d94ccab2da652598"),
"genre" : [
"fantasy",
"adventure"
    ]
}
Querying for key with
multiple values
>db.books.findOne({genre: 'fantasy'}, {title: 1})
{
"_id" : ObjectId("50804391d94ccab2da652598"),
"title" : "fellowship of the ring, the"
}




                      Query key with single value or
                      multiple values the same way.
Nested Values
>db.books.findOne({}, {publication: 1})
{
"_id" : ObjectId("50804ec7d94ccab2da65259a"),
"publication" : {
"name" : "georgeallen&unwin",
"location" : "London",
"date" : ISODate("1954-07-21T04:00:00Z")
    }
}
Reach into nested values
using dot notation
>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" : "georgeallen&unwin",
"location" : "London",
"date" : ISODate("1954-07-21T04:00:00Z")
     }
}
Update books
>db.books.update(
            {"_id" : ObjectId("50804391d94ccab2da652598")},
                { $set : {
isbn: '0547928211',
                      pages: 432
                         }
 })

                True agile development .
                Simply change how you work with
                the data and the database follows
The Updated Book record
db.books.findOne()
{
"_id" : ObjectId("50804ec7d94ccab2da65259a"),
"author" : ObjectId("507ffbb1d94ccab2da652597"),
"genre" : [ "fantasy", "adventure" ],
"isbn" : "0395082544",
"language": "english",
"pages": 432,
"publication" : {
"name" : "georgeallen&unwin",
"location" : "London",
     "date" : ISODate("1954-07-21T04:00:00Z")
     },
"title" : "fellowship of the ring, the"
}
Creating indexes
>db.books.ensureIndex({title: 1})


>db.books.ensureIndex({genre : 1})


>db.books.ensureIndex({'publication.date': -1})
Querying with RegEx
>db.books.findOne({title : /^fell/})
{
"_id": ObjectId("50804ec7d94ccab2da65259a"),
"author" : ObjectId("507ffbb1d94ccab2da652597"),
"genre" : [ "fantasy", "adventure"],
"isbn" : "0395082544",
"language" : "english",
"pages" : 432,
"publication" : {
"name" : "georgeallen&unwin",
"location" : "London",
"date" : ISODate("1954-07-21T04:00:00Z")
     },
"title" : "fellowship of the ring, the"
}
Adding a few more books
>db.books.insert({
             title: 'two towers, the',
         author: ObjectId("507ffbb1d94ccab2da652597"),
language: 'english',
isbn: "034523510X",
         genre: ['fantasy', 'adventure'],
         pages: 447,
         publication: {
                        name: 'georgeallen&unwin',
                   location: 'London',
                        date: new Date('11 Nov 1954'),
         }
})


                                       http://society6.com/PastaSoup/The-Two-Towers-XTr_Print/
Adding a few more books
>db.books.insert({
             title: 'return of the king, the',
             author: ObjectId("507ffbb1d94ccab2da652597"),
             language: 'english',
isbn : "0345248295",
             genre: ['fantasy', 'adventure'],
             pages: 544,
             publication: {
                        name: 'georgeallen&unwin',
                        location: 'London',
                        date: new Date('20 Oct 1955'),
             }
})


                                     http://society6.com/PastaSoup/The-Return-of-the-King-Jsc_Print/
Cursors
>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" : "georgeallen&unwin",
"location" : "London",
"date" : ISODate("1955-10-20T04:00:00Z")
     }
}
Paging
page_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);
Finding author by book
>book= db.books.findOne(
           {"title" : "return of the king, the"})

>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 as the
creator of The Hobbit and The Lord of the Rings, was a professor of
Anglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow of
Merton College until his retirement in 1959. His chief interest was the
linguistic aspects of the early English written tradition, but even as he
studied these classics he was creating a set of his own."
}
MongoDB Drivers
Real applications are not
built in the shell
MongoDB has native
bindings for over 12
languages
MongoDB drivers
• Official 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)
Next Steps
We've introduced a lot of
concepts here
Schema Design Talk
IndexingTalk
ReplicationTalk
ShardingTalk
MongoDB Miami February 7, 2013




Questions?
Robert Stam
Software Engineer, 10gen

Mais conteúdo relacionado

Mais procurados

Data Modeling Deep Dive
Data Modeling Deep DiveData Modeling Deep Dive
Data Modeling Deep Dive
MongoDB
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema Design
Alex Litvinok
 

Mais procurados (18)

Back to Basics Webinar 3 - Thinking in Documents
Back to Basics Webinar 3 - Thinking in DocumentsBack to Basics Webinar 3 - Thinking in Documents
Back to Basics Webinar 3 - Thinking in Documents
 
Back to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB ApplicationBack to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB Application
 
MongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - InboxesMongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - Inboxes
 
Back to Basics Webinar 1 - Introduction to NoSQL
Back to Basics Webinar 1 - Introduction to NoSQLBack to Basics Webinar 1 - Introduction to NoSQL
Back to Basics Webinar 1 - Introduction to NoSQL
 
MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...
MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...
MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...
 
Dev Jumpstart: Schema Design Best Practices
Dev Jumpstart: Schema Design Best PracticesDev Jumpstart: Schema Design Best Practices
Dev Jumpstart: Schema Design Best Practices
 
Data Modeling Deep Dive
Data Modeling Deep DiveData Modeling Deep Dive
Data Modeling Deep Dive
 
Data Modeling for the Real World
Data Modeling for the Real WorldData Modeling for the Real World
Data Modeling for the Real World
 
Webinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real WorldWebinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real World
 
Mongo DB schema design patterns
Mongo DB schema design patternsMongo DB schema design patterns
Mongo DB schema design patterns
 
Introduction to MongoDB and Hadoop
Introduction to MongoDB and HadoopIntroduction to MongoDB and Hadoop
Introduction to MongoDB and Hadoop
 
Building your first app with mongo db
Building your first app with mongo dbBuilding your first app with mongo db
Building your first app with mongo db
 
Schema Design by Example ~ MongoSF 2012
Schema Design by Example ~ MongoSF 2012Schema Design by Example ~ MongoSF 2012
Schema Design by Example ~ MongoSF 2012
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDB
 
MongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World Examples
 
Indexing
IndexingIndexing
Indexing
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema Design
 
Redis data modeling examples
Redis data modeling examplesRedis data modeling examples
Redis data modeling examples
 

Destaque

MongoDB and Windows Azure
MongoDB and Windows AzureMongoDB and Windows Azure
MongoDB and Windows Azure
MongoDB
 
First app online conf
First app   online confFirst app   online conf
First app online conf
MongoDB
 
Schema design mongo_boston
Schema design mongo_bostonSchema design mongo_boston
Schema design mongo_boston
MongoDB
 
The importance of indexes in mongo db
The importance of indexes in mongo dbThe importance of indexes in mongo db
The importance of indexes in mongo db
MongoDB
 
Mongo db conference march 2012 (1)
Mongo db conference march 2012 (1)Mongo db conference march 2012 (1)
Mongo db conference march 2012 (1)
MongoDB
 
Indexing & Query Optimization
Indexing & Query OptimizationIndexing & Query Optimization
Indexing & Query Optimization
MongoDB
 
20121023 mongodb schema-design
20121023 mongodb schema-design20121023 mongodb schema-design
20121023 mongodb schema-design
MongoDB
 
MongoDB and Web Scrapping with the Gyes Platform
MongoDB and Web Scrapping with the Gyes PlatformMongoDB and Web Scrapping with the Gyes Platform
MongoDB and Web Scrapping with the Gyes Platform
MongoDB
 
MongoDB using PHP: Using a New Framework Called Ox
MongoDB using PHP: Using a New Framework Called OxMongoDB using PHP: Using a New Framework Called Ox
MongoDB using PHP: Using a New Framework Called Ox
MongoDB
 
A flexible plugin like data layer - decouple your -_application logic from yo...
A flexible plugin like data layer - decouple your -_application logic from yo...A flexible plugin like data layer - decouple your -_application logic from yo...
A flexible plugin like data layer - decouple your -_application logic from yo...
MongoDB
 

Destaque (16)

MongoDB and Windows Azure
MongoDB and Windows AzureMongoDB and Windows Azure
MongoDB and Windows Azure
 
What's New in the PHP Driver
What's New in the PHP DriverWhat's New in the PHP Driver
What's New in the PHP Driver
 
First app online conf
First app   online confFirst app   online conf
First app online conf
 
Schema design mongo_boston
Schema design mongo_bostonSchema design mongo_boston
Schema design mongo_boston
 
Use Case: Apollo Group at Oracle Open World
Use Case: Apollo Group at Oracle Open WorldUse Case: Apollo Group at Oracle Open World
Use Case: Apollo Group at Oracle Open World
 
The importance of indexes in mongo db
The importance of indexes in mongo dbThe importance of indexes in mongo db
The importance of indexes in mongo db
 
MongoDB at Flight Centre Ltd
MongoDB at Flight Centre LtdMongoDB at Flight Centre Ltd
MongoDB at Flight Centre Ltd
 
Mongo db conference march 2012 (1)
Mongo db conference march 2012 (1)Mongo db conference march 2012 (1)
Mongo db conference march 2012 (1)
 
An Evening with MongoDB - Orlando: Welcome and Keynote
An Evening with MongoDB - Orlando: Welcome and KeynoteAn Evening with MongoDB - Orlando: Welcome and Keynote
An Evening with MongoDB - Orlando: Welcome and Keynote
 
Indexing & Query Optimization
Indexing & Query OptimizationIndexing & Query Optimization
Indexing & Query Optimization
 
20121023 mongodb schema-design
20121023 mongodb schema-design20121023 mongodb schema-design
20121023 mongodb schema-design
 
Introducing MongoDB into your Organization
Introducing MongoDB into your OrganizationIntroducing MongoDB into your Organization
Introducing MongoDB into your Organization
 
MongoDB and Web Scrapping with the Gyes Platform
MongoDB and Web Scrapping with the Gyes PlatformMongoDB and Web Scrapping with the Gyes Platform
MongoDB and Web Scrapping with the Gyes Platform
 
Case Studies: Leroy Merlin and Wellnet
Case Studies: Leroy Merlin and WellnetCase Studies: Leroy Merlin and Wellnet
Case Studies: Leroy Merlin and Wellnet
 
MongoDB using PHP: Using a New Framework Called Ox
MongoDB using PHP: Using a New Framework Called OxMongoDB using PHP: Using a New Framework Called Ox
MongoDB using PHP: Using a New Framework Called Ox
 
A flexible plugin like data layer - decouple your -_application logic from yo...
A flexible plugin like data layer - decouple your -_application logic from yo...A flexible plugin like data layer - decouple your -_application logic from yo...
A flexible plugin like data layer - decouple your -_application logic from yo...
 

Semelhante a Building Your First App: An Introduction to MongoDB

buildyourfirstmongodbappberlin2013thomas-130313104259-phpapp02.pdf
buildyourfirstmongodbappberlin2013thomas-130313104259-phpapp02.pdfbuildyourfirstmongodbappberlin2013thomas-130313104259-phpapp02.pdf
buildyourfirstmongodbappberlin2013thomas-130313104259-phpapp02.pdf
lallababa
 
C# Development (Sam Corder)
C# Development (Sam Corder)C# Development (Sam Corder)
C# Development (Sam Corder)
MongoSF
 
10gen Presents Schema Design and Data Modeling
10gen Presents Schema Design and Data Modeling10gen Presents Schema Design and Data Modeling
10gen Presents Schema Design and Data Modeling
DATAVERSITY
 
Schema Design
Schema DesignSchema Design
Schema Design
MongoDB
 
Schema & Design
Schema & DesignSchema & Design
Schema & Design
MongoDB
 

Semelhante a Building Your First App: An Introduction to MongoDB (20)

Building Your First App with MongoDB
Building Your First App with MongoDBBuilding Your First App with MongoDB
Building Your First App with MongoDB
 
buildyourfirstmongodbappberlin2013thomas-130313104259-phpapp02.pdf
buildyourfirstmongodbappberlin2013thomas-130313104259-phpapp02.pdfbuildyourfirstmongodbappberlin2013thomas-130313104259-phpapp02.pdf
buildyourfirstmongodbappberlin2013thomas-130313104259-phpapp02.pdf
 
C# Development (Sam Corder)
C# Development (Sam Corder)C# Development (Sam Corder)
C# Development (Sam Corder)
 
Schema design
Schema designSchema design
Schema design
 
Webinar: Schema Design
Webinar: Schema DesignWebinar: Schema Design
Webinar: Schema Design
 
MongoDB Mojo: Building a Basic Perl App
MongoDB Mojo: Building a Basic Perl AppMongoDB Mojo: Building a Basic Perl App
MongoDB Mojo: Building a Basic Perl App
 
Webinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsWebinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in Documents
 
10gen Presents Schema Design and Data Modeling
10gen Presents Schema Design and Data Modeling10gen Presents Schema Design and Data Modeling
10gen Presents Schema Design and Data Modeling
 
Schema Design
Schema DesignSchema Design
Schema Design
 
運用 Exposed 管理及操作資料庫
運用 Exposed 管理及操作資料庫運用 Exposed 管理及操作資料庫
運用 Exposed 管理及操作資料庫
 
Ast transformations
Ast transformationsAst transformations
Ast transformations
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema Design
 
Schema Design with MongoDB
Schema Design with MongoDBSchema Design with MongoDB
Schema Design with MongoDB
 
Flash Build: Understanding Shakespeare - ITHAKA Sustainable Scholarship 2014
Flash Build: Understanding Shakespeare - ITHAKA Sustainable Scholarship 2014Flash Build: Understanding Shakespeare - ITHAKA Sustainable Scholarship 2014
Flash Build: Understanding Shakespeare - ITHAKA Sustainable Scholarship 2014
 
ElasticSearch at berlinbuzzwords 2010
ElasticSearch at berlinbuzzwords 2010ElasticSearch at berlinbuzzwords 2010
ElasticSearch at berlinbuzzwords 2010
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Webinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev TeamsWebinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev Teams
 
Schema & Design
Schema & DesignSchema & Design
Schema & Design
 
How to survive in a BASE world
How to survive in a BASE worldHow to survive in a BASE world
How to survive in a BASE world
 
Schema Design
Schema DesignSchema Design
Schema Design
 

Mais de MongoDB

Mais de MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Building Your First App: An Introduction to MongoDB

  • 1. MongoDB Miami February 7, 2013 Building your first app; an introduction to MongoDB Robert Stam Software Engineer, 10gen
  • 3. MongoDB isa ___________ database • Document • Open source • High performance • Horizontally scalable • Full featured
  • 4. Document Database • Not for .PDF & .DOC files • A document is essentially an associative array • Document == JSON object • Document == PHP Array • Document == Python Dict • Document == Ruby Hash • etc
  • 5. Open Source • MongoDB is an open source project • On GitHub • Licensed under the AGPL • Started & 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 & secondary indexes • Document model = less work
  • 8. Full Featured • Ad Hoc queries • Real time aggregation • Rich query capabilities • Traditionally consistent • Geospatial features • Support for most programming languages • Flexible schema
  • 13. RDBMS MongoDB Table, View ➜ Collection Row ➜ Document Index ➜ Index Join ➜ Embedded Document Foreign Key ➜ Reference Partition ➜ Shard Terminology
  • 16. We will build a library management application http://www.flickr.com/photos/somegeekintn/3484353131/
  • 17. First step in any application is Determine your entities
  • 18. Library Management Application Entities • Library Patrons (users) • Books (catalog) • Authors • Publishers • Categories ??
  • 19. In a relational based app We would start by doing schema 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 we'd have 5 tables and 5 join tables • Lots of revisions until we get it just right
  • 21. In a MongoDB based app We start building our and let the schema evolve app
  • 22. MongoDB collections • Users • Books • Authors • Publishers
  • 23. No common language so using the shell
  • 25. Start with an object (or array, hash, dict, etc) user= { username: 'fred.jones', first_name: 'fred', last_name: 'jones', }
  • 26. Insert the record >db.users.insert(user) No collection creation needed
  • 27. Querying for the user >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") |-------------||---------||-----||----------| tsmacpidinc
  • 30. Creating an author >db.author.insert({ first_name: 'j.r.r.', last_name: 'tolkien', bio: 'J.R.R. Tolkien (1892.1973), beloved throughout the world as the creator of The Hobbit and The Lord of the Rings, was a professor of Anglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow of Merton College until his retirement in 1959. His chief interest was the linguistic aspects of the early English written tradition, but even as he studied these classics he was creating a set of his own.' })
  • 31. Querying for our author >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 world as the creator of The Hobbit and The Lord of the Rings, was a professor of Anglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow of Merton College until his retirement in 1959. His chief interest was the linguistic aspects of the early English written tradition, but even as he studied these classics he was creating a set of his own." }
  • 32. Creating a Book >db.books.insert({ title: 'fellowship of the ring, the', author: ObjectId("507ffbb1d94ccab2da652597"), language: 'english', genre: ['fantasy', 'adventure'], publication: { name: 'georgeallen&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 >db.books.findOne({language: 'english'}, {genre: 1}) { "_id" : ObjectId("50804391d94ccab2da652598"), "genre" : [ "fantasy", "adventure" ] }
  • 34. Querying for key with multiple values >db.books.findOne({genre: 'fantasy'}, {title: 1}) { "_id" : ObjectId("50804391d94ccab2da652598"), "title" : "fellowship of the ring, the" } Query key with single value or multiple values the same way.
  • 35. Nested Values >db.books.findOne({}, {publication: 1}) { "_id" : ObjectId("50804ec7d94ccab2da65259a"), "publication" : { "name" : "georgeallen&unwin", "location" : "London", "date" : ISODate("1954-07-21T04:00:00Z") } }
  • 36. Reach into nested values using dot notation >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" : "georgeallen&unwin", "location" : "London", "date" : ISODate("1954-07-21T04:00:00Z") } }
  • 37. Update books >db.books.update( {"_id" : ObjectId("50804391d94ccab2da652598")}, { $set : { isbn: '0547928211', pages: 432 } }) True agile development . Simply change how you work with the data and the database follows
  • 38. The Updated Book record db.books.findOne() { "_id" : ObjectId("50804ec7d94ccab2da65259a"), "author" : ObjectId("507ffbb1d94ccab2da652597"), "genre" : [ "fantasy", "adventure" ], "isbn" : "0395082544", "language": "english", "pages": 432, "publication" : { "name" : "georgeallen&unwin", "location" : "London", "date" : ISODate("1954-07-21T04:00:00Z") }, "title" : "fellowship of the ring, the" }
  • 39. Creating indexes >db.books.ensureIndex({title: 1}) >db.books.ensureIndex({genre : 1}) >db.books.ensureIndex({'publication.date': -1})
  • 40. Querying with RegEx >db.books.findOne({title : /^fell/}) { "_id": ObjectId("50804ec7d94ccab2da65259a"), "author" : ObjectId("507ffbb1d94ccab2da652597"), "genre" : [ "fantasy", "adventure"], "isbn" : "0395082544", "language" : "english", "pages" : 432, "publication" : { "name" : "georgeallen&unwin", "location" : "London", "date" : ISODate("1954-07-21T04:00:00Z") }, "title" : "fellowship of the ring, the" }
  • 41. Adding a few more books >db.books.insert({ title: 'two towers, the', author: ObjectId("507ffbb1d94ccab2da652597"), language: 'english', isbn: "034523510X", genre: ['fantasy', 'adventure'], pages: 447, publication: { name: 'georgeallen&unwin', location: 'London', date: new Date('11 Nov 1954'), } }) http://society6.com/PastaSoup/The-Two-Towers-XTr_Print/
  • 42. Adding a few more books >db.books.insert({ title: 'return of the king, the', author: ObjectId("507ffbb1d94ccab2da652597"), language: 'english', isbn : "0345248295", genre: ['fantasy', 'adventure'], pages: 544, publication: { name: 'georgeallen&unwin', location: 'London', date: new Date('20 Oct 1955'), } }) http://society6.com/PastaSoup/The-Return-of-the-King-Jsc_Print/
  • 43. Cursors >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" : "georgeallen&unwin", "location" : "London", "date" : ISODate("1955-10-20T04:00:00Z") } }
  • 44. Paging page_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 author by book >book= db.books.findOne( {"title" : "return of the king, the"}) >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 as the creator of The Hobbit and The Lord of the Rings, was a professor of Anglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow of Merton College until his retirement in 1959. His chief interest was the linguistic aspects of the early English written tradition, but even as he studied these classics he was creating a set of his own." }
  • 47. Real applications are not built in the shell
  • 48. MongoDB has native bindings for over 12 languages
  • 49.
  • 50.
  • 51. MongoDB drivers • Official 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)
  • 53. We've introduced a lot of concepts here
  • 58. MongoDB Miami February 7, 2013 Questions? Robert Stam Software Engineer, 10gen

Notas do Editor

  1. AGPL – GNU Affero General Public License
  2. * Big endian and ARM not supported.
  3. Kristine to update this graphic at some point
  4. Kristine to update this graphic at some point
  5. Kristine to update this graphic at some point
  6. Ask question: Is categories it's own entity? It could be, but it's likely a property of books.
  7. Ask question: Is categories it's own entity? It could be, but it's likely a property of books.
  8. Notice how they are the same as the entities listed above
  9. "50804d0bd94ccab2da652599" is a 24 byte string (12 byte ObjectId hex encoded).
  10. Powerful message here. Finally a database that enables rapid & agile development.
  11. Creating a book here. A few things to make note of.
  12. Powerful message here. Finally a database that enables rapid & agile development.
  13. Creating a book here. A few things to make note of.
  14. Creating a book here. A few things to make note of.
  15. This is fine for small result sets. Not good performance for large result sets. Range query plus limit will give better performance.
  16. 10gen Drivers
  17. Plus community drivers.
  18. This graphic should be updated at some point.