A Brief MongoDB Intro

18
MongoDB The Highly Scalable, Enterprise Grade, Open Source Database

description

A brief mongodb intro

Transcript of A Brief MongoDB Intro

Page 1: A Brief MongoDB Intro

MongoDB

The Highly Scalable, Enterprise Grade, Open Source Database

Page 2: A Brief MongoDB Intro

NoSQL: A New Era of Databases

•Big Data, Big Problem

Scaling for the Demands of Modern Applications

Page 3: A Brief MongoDB Intro

Starting from Scratch

•10gen as an open source ‘app engine’ cloud platform•Backend storage needs

•Agility

•Scalability

•Feature-richness

•Performance

•Ease of use

Page 4: A Brief MongoDB Intro

Agility

•MongoDB is document-oriented. •JSON-like objects•‘Documents’ are organized into ‘Collections’•Schema is not enforced

> a = { name: “mongo” }; { “name” : “mongo”}>b = { x : 3 }; { “x ” : 3 }> c = { x : 4 , j : 1 }; { “x ” : 4 , “j” : 1 }>db.things.save(a)>db.things.save(b)>db.things.save(c)>db.things.find(){ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }

Page 5: A Brief MongoDB Intro

Deep Data

{ _id : ObjectId("4c4ba5c0672c685e5e8aabf3"), author : ”roger", date : "Sat Jul 24 2010 19:47:11 GMT-0700 (PDT)", text : "I love J.Biebs...", tags : [ ”rockstar", ”puppy-love" ], comments_count: 1, comments : [

{author : ”Gretchen",date : "Sat Jul 24 2010 20:51:03 GMT-0700 (PDT)",text : ” Biebs is Toll!!!!"

} ]}

Page 6: A Brief MongoDB Intro

Replication•Replication for high availability

•Replica Sets

•Auto-failover

•Primary fails, secondary elected primary

•Primary repaired, becomes secondary

•Single-write node

•Great for higher read volume

Page 7: A Brief MongoDB Intro

Replication

PrimaryPrimary

SecondarySecondarySecondarySecondary

SecondarySecondary SecondarySecondary

ClieClientnt

Page 8: A Brief MongoDB Intro

Scalability

•MongoDB features autosharding for horizontal scalability

mongodmongod mongodmongodmongodmongod

mongosmongosmongodmongod

mongodmongod

mongodmongod

Config Servers

Shard Shard Shard

ClienClientt

Page 9: A Brief MongoDB Intro

Sharding with Replica Sets

mongodmongod

mongosmongosmongodmongod

mongodmongod

mongodmongod

Config Servers

Shard Shard Shard

mongomongodd

mongomongodd

mongodmongod

mongomongodd

mongomongodd

mongodmongod

mongomongodd

mongomongodd

ClienClientt

Page 10: A Brief MongoDB Intro

Performance

•Data Model

•Dynamic

•Deep data•In-place updates•Simplicity

Page 11: A Brief MongoDB Intro

Performance•milancermak.posterous.com

Page 12: A Brief MongoDB Intro

Performance

•MongoDB test results:

•siege -f ./stress_urls.txt -c 300 -r

10 -d1 -i

•Transactions: 2994 hits

•Availability: 99.80 %

•Elapsed time: 11.95 secs

•Data transferred: 3.19 MB

•Response time: 0.26 secs

•Transaction rate: 250.54 trans/sec

•Throughput: 0.27 MB/sec

•Concurrency: 65.03

•Successful transactions: 2994

•Failed transactions: 6

•Longest transaction: 1.47

•Shortest transaction: 0.00

MySQL test results:

siege -f ./stress_urls_mysql.txt -c 300 -r 10 -

d1 -i

Transactions: 2832 hits

Availability: 94.40 %

Elapsed time: 23.53 secs

Data transferred: 2.59 MB

Response time: 0.74 secs

Transaction rate: 120.36 trans/sec

Throughput: 0.11 MB/sec

Concurrency: 89.43

Successful transactions: 2832

Failed transactions: 168

Longest transaction: 16.36

Shortest transaction: 0.00

obvioushints.blogspot.com

Page 13: A Brief MongoDB Intro

Performance•bcbio.wordpress.com

Page 14: A Brief MongoDB Intro

Recent MongoDB Conferences

Page 15: A Brief MongoDB Intro

MongoDB Downloads

Page 16: A Brief MongoDB Intro

Production + Deployments

Page 17: A Brief MongoDB Intro

Thank you

@mongodb

[email protected]; [email protected] France, March 23

MongoSF, May 24http://www.10gen.com/events

http://bit.ly/mongofb Facebook | Twitter | LinkedIn http://linkd.in/joinmongo

download at mongodb.org

Page 18: A Brief MongoDB Intro

(SQL vs MongoDB)•SQL Statement •Mongo Query Language Statement •CREATE TABLE USERS (a Number, b Number)•implicit; can be done explicitly•INSERT INTO USERS VALUES(1,1)•db.users.insert({a:1,b:1})•SELECT a,b FROM users•db.users.find({}, {a:1,b:1})•SELECT * FROM users•db.users.find()•SELECT * FROM users WHERE age=33•db.users.find({age:33})•SELECT a,b FROM users WHERE age=33•db.users.find({age:33}, {a:1,b:1})•SELECT * FROM users WHERE age=33 ORDER BY name•db.users.find({age:33}).sort({name:1})•SELECT * FROM users WHERE age>33•db.users.find({'age':{$gt:33}})})•SELECT * FROM users WHERE age<33•db.users.find({'age':{$lt:33}})})•SELECT * FROM users WHERE name LIKE "%Joe%"•db.users.find({name:/Joe/})•SELECT * FROM users WHERE name LIKE "Joe%"•db.users.find({name:/^Joe/})

CREATE INDEX myindexname ON users(name,ts DESC)db.users.ensureIndex({name:1,ts:-1})SELECT * FROM users WHERE a=1 and b='q'db.users.find({a:1,b:'q'})SELECT * FROM users LIMIT 10 SKIP 20db.users.find().limit(10).skip(20)SELECT * FROM users WHERE a=1 or b=2db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )SELECT * FROM users LIMIT 1db.users.findOne()EXPLAIN SELECT * FROM users WHERE z=3db.users.find({z:3}).explain()SELECT DISTINCT last_name FROM usersdb.users.distinct('last_name')SELECT COUNT(*y)FROM usersdb.users.count()SELECT COUNT(*y)FROM users where AGE > 30db.users.find({age: {'$gt': 30}}).count()