dev jumpstart: build your first app with mongodb
DESCRIPTION
New to MongoDB? This talk will introduce the philosophy and features of MongoDB. We’ll discuss the benefits of the document-based data model that MongoDB offers by walking through how one can build a simple app. We’ll cover inserting, updating, and querying the database of books. This session will jumpstart your knowledge of MongoDB development, providing you with context for the rest of the day's content.TRANSCRIPT
![Page 1: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/1.jpg)
Senior Solutions Architect, MongoDB
Sandeep Parikh
#mongodb
Building your first app;an introduction to MongoDB
![Page 2: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/2.jpg)
What is MongoDB?
![Page 3: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/3.jpg)
MongoDB is a ___________ database
• Document
• Open source
• High performance
• Horizontally scalable
• Full featured
![Page 4: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/4.jpg)
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
![Page 5: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/5.jpg)
Open Source
• MongoDB is an open source project
• On GitHub
• Licensed under the AGPL
• Started & sponsored by MongoDB Inc (formerly 10gen)
• Commercial licenses available
• Contributions welcome
![Page 6: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/6.jpg)
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 = agile development
![Page 7: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/7.jpg)
Database Landscape
![Page 8: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/8.jpg)
Full Featured
• Flexible schema
• Rich ad-hoc queries
• Real time aggregation
• Strongly consistent
• Geospatial features
• Built-in automatic failover
• Horizontally scalable reads/writes
• Support for most programming languages
![Page 9: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/9.jpg)
mongodb.org/downloads
![Page 10: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/10.jpg)
$ tar zxf mongodb-osx-x86_64-2.6.4.tgz
$ cd mongodb-osx-x86_64-2.6.4/bin
$ mkdir –p /data/db
$ ./mongod
Running MongoDB
![Page 11: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/11.jpg)
$ mongoMongoDB shell version: 2.6.4connecting to: test> db.test.insert({text: 'Welcome to MongoDB'})> db.test.find().pretty(){
"_id" : ObjectId("51c34130fbd5d7261b4cdb55"),"text" : "Welcome to MongoDB"
}
Mongo Shell
![Page 12: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/12.jpg)
Building an App with MongoDB
![Page 13: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/13.jpg)
Terminology
RDBMS MongoDB
Table, View ➜ Collection
Row ➜ Document
Index ➜ Index
Join ➜ Embedded Document
Foreign Key ➜ Reference
Partition ➜ Shard
![Page 14: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/14.jpg)
Let’s Build a Monitoring System
![Page 15: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/15.jpg)
First step in any application is
Determine basic requirements
![Page 16: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/16.jpg)
Basic Monitoring Requirements
• Data generated at per-second intervals
• Metrics to capture (ex. CPU, memory, IO)
• Document structure for fast writes and easy reads
![Page 17: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/17.jpg)
In a relational base app
We would start by doing schema design
![Page 18: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/18.jpg)
Relational Schema Options
CPU Metrics
Memory Metrics
IO Metrics
Events
• Timestamp• CPU metrics• Memory metrics• IO metrics
Or
![Page 19: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/19.jpg)
In a MongoDB based appWe start with a generic modeland let the documents evolve
![Page 20: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/20.jpg)
MongoDB Document Modeling
Events
CPU []• Second• Metric
Memory []• Second• Metric
IO []• Second• Metric
Timestamp (min)
![Page 21: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/21.jpg)
Working With MongoDB
![Page 22: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/22.jpg)
$ mongo
MongoDB shell version: 2.6.4
connecting to: test
>
Start with the Mongo Shell
Full Javascript shell
![Page 23: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/23.jpg)
> use monitoring
switching to db monitoring
Switch to Your DB
DB files are created once you save a document
![Page 24: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/24.jpg)
> var event = {
ts: ISODate(“2014-09-16T09:00:00”),
cpu: [ 0, 0, …, 0 ],
memory: [ 0, 0, …, 0 ],
io: [ 0, 0, …, 0 ],
}
Create an Empty Event
Insert zeroed-out arrays to fill in later
![Page 25: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/25.jpg)
> db.events.insert(event)
Insert the Event
No collection creation necessary
![Page 26: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/26.jpg)
> db.events.findOne()
{
"_id" : ObjectId("50804d0bd94ccab2da652599"),
”ts" : ISODate(“2014-09-16T09:00:00”),
”cpu" : [ 0, 0, …, 0 ],
”memory" : [ 0, 0, …, 0 ],
“io” : [ 0, 0, …, 0 ]
}
Find One Record
![Page 27: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/27.jpg)
How do you capture events?
Server
Server
Server
MongoDB
cpu
memory
io
interaction
interaction
interaction
![Page 28: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/28.jpg)
> db.events.update( { ts: ISODate(“2014-09-16T09:00:00”) } { $set: { “cpu.0” : 50, “memory.0”: 1500, “io.0”: 10 } })
Adding a New Event
Use atomic in-place updates to add metric values
![Page 29: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/29.jpg)
How do you plot charts?
![Page 30: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/30.jpg)
> db.events.find({
ts: {
$gte: ISODate(“2014-09-16T09:00:00”),
$lt: ISODate(“2014-09-16T10:00:00”)
}
}).sort({ts:1})
Finding an Hour of Events
Find using a range and sort results ascending
![Page 31: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/31.jpg)
How do you roll up the data?
Hour Avg Cpu
0 50
1 65
2 75
3 40
4 45
5 60
6 25
… …
23 30
![Page 32: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/32.jpg)
> db.events.aggregate([
{ $match: { ts: { $gte: date0, $lt: date1 } } },
{ $project: { _id: 0, ts: 1, cpu: 1 } },
{ $unwind: “$cpu” },
{ $group: {
_id: { $hour: “$ts” },
avg_cpu: { $avg: “$cpu” } } }
])
Aggregate Metrics
Use Aggregation Framework to roll up data
![Page 33: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/33.jpg)
How do you scale this workload
• Replica Sets– Add data redundancy– Automatic failover– Tunable durability, consistency
• Sharding– Scale reads and writes– Support dynamic data growth– Automatically partitions workload– Horizontally scalable
![Page 34: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/34.jpg)
MongoDB Drivers
![Page 35: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/35.jpg)
Real applications are not built in the shell
![Page 36: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/36.jpg)
MongoDB has native bindings for over 12 languages
![Page 37: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/37.jpg)
![Page 38: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/38.jpg)
![Page 39: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/39.jpg)
MongoDB Drivers
• Official Support for 12 languages
• Community drivers for tons more
• Drivers connect to MongoDB servers
• Drivers translate BSON into native types
• Shell is not a driver, but works like one in some ways
• Installed using typical means (npm, pecl, gem, pip)
![Page 40: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/40.jpg)
docs.mongodb.org
![Page 41: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/41.jpg)
Online Training at MongoDB University
![Page 42: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/42.jpg)
Questions?
![Page 43: Dev Jumpstart: Build Your First App with MongoDB](https://reader033.vdocuments.net/reader033/viewer/2022061304/54952280b4795971338b45a5/html5/thumbnails/43.jpg)
Senior Solutions Architect, MongoDB
Sandeep Parikh
#mongodb
Thank You