mongodb in action

21
MongoDB In Action 超超 .com @fuchaoqun http://www.fuchaoqun.com

Upload: fuchaoqun

Post on 12-Nov-2014

16.475 views

Category:

Technology


0 download

DESCRIPTION

how to use mongodb as MySQL

TRANSCRIPT

Page 1: MongoDb In Action

MongoDB In Action

超群 .com@fuchaoqun

http://www.fuchaoqun.com

Page 2: MongoDb In Action

I will talk ….

•About MongoDB

•Dynamic querys

•Replication

•Sharding

•GridFS

•Performance

Page 3: MongoDb In Action
Page 4: MongoDb In Action

About MongoDB?

•Document-oriented

•JSON-style documents

•Schema-free

•Written in C++ for high

performance

•Scalable

•MapReduce

•Many supported platforms

& languages

Page 5: MongoDb In Action

Dynamic querysSelect

MySQL: SELECT * FROM user

Mongo: db.user.find()

MySQL: SELECT * FROM user WHERE name = 'foobar'

Mongo: db.user.find({'name' : 'foobar'})

Page 6: MongoDb In Action

Dynamic querysInsert

MySQL: INSERT INOT user (`name`, `age`) values ('foobar',25)

Mongo: db.user.insert({'name' : 'foobar', 'age' : 25})

if you want add a column `email` on MySQL,you must : ALTER TABLE user….

But in Mongo,you can just: db.user.insert({'name' : 'foobar', 'age' : 25, 'email' : '[email protected]'})

Page 7: MongoDb In Action

Dynamic querysDelete

MySQL: DELETE * FROM user

Mongo: db.user.remove({})

MySQL: DELETE FROM user WHERE age < 30

Mongo: db.user.remove({'age' : {$lt : 30}})

$gt : > ; $gte : >= ; $lt : < ; $lte : <= ; $ne : !=

Page 8: MongoDb In Action

Dynamic querysUpdate

MySQL: UPDATE user SET `age` = 36 WHERE `name` = 'foobar'

Mongo: db.user.update({'name' : 'foobar'}, {$set : {'age' : 36}})

MySQL: UPDATE user SET `age` = `age` + 3 WHERE `name` = 'foobar'

Mongo: db.user.update({'name' : 'foobar'}, {$inc : {'age' : 3}})

See more @ http://tinyurl.com/yka6ras

Page 9: MongoDb In Action

Dynamic querysAdvanced

MySQL: SELECT COUNT(*) FROM user WHERE `name` = 'foobar'

Mongo: db.user.find({'name' : 'foobar'}).count()

MySQL: SELECT * FROM user limit 10,20

Mongo: db.user.find().skip(10).limit(20)

Page 10: MongoDb In Action

Dynamic querysAdvanced

MySQL: SELECT * FROM user WHERE `age` IN (25, 35,45)

Mongo: db.user.find({'age' : {$in : [25, 35, 45]}})

MySQL: SELECT * FROM user limit 10,20

Mongo: db.user.find().skip(10).limit(20)

Page 11: MongoDb In Action

Dynamic querysAdvanced

MySQL: SELECT * FROM user ORDER BY age DESC

Mongo: db.user.find().sort({'age' : -1})

MySQL: SELECT DISTINCT(name) FROM user WHERE age > 20

Mongo: db.user.distinct('name', {'age': {$lt : 20}})

Page 12: MongoDb In Action

Dynamic querysAdvanced

MySQL: SELECT name, sum(marks) FROM user GROUP BY name

Mongo: db.user.group({ key : {'name' : true}, cond: {'name' : 'foo'}, reduce: function(obj,prev) { prev.msum += obj.marks; }, initial: {msum : 0} });

MySQL: SELECT name FROM user WHERE age < 20

Mongo: db.user.find('this.age < 20', {name : 1})

See more @ http://tinyurl.com/ykyuuwo

Page 13: MongoDb In Action

So….

MongoDB can do almost everything that MySQL can do,

and quicker & smarter

Page 14: MongoDb In Action

Replication

•Master-Slave Replication

•Replica Pairs

•Limited Master-Master Replication

Page 15: MongoDb In Action

Sharding

Page 16: MongoDb In Action

GridFS•files: object metadata

•chunks: binary data

Page 17: MongoDb In Action

Use GridFS In PHP

Page 18: MongoDb In Action

GridFS Projects

•nginx-gridfs

http://github.com/mdirolf/nginx-gridfs

•gridfs-fuse

http://github.com/mikejs/gridfs-fuse

Page 19: MongoDb In Action

Performance

Database Load time Retrieval time File size

Tokyo Cabinet/Tyrant 12m 3.5m 24MB

CouchDB 5.5m 14.5m 236MB

MongoDB 3m 4m 192-960MB

From: http://tinyurl.com/okq7m5

From: http://tinyurl.com/yc3rlld

See more @ http://tinyurl.com/yanwn2b

Benchmark means nothing , but most of us like it.

Page 20: MongoDb In Action

Who is using MongoDB?

See more @ http://tinyurl.com/dhrryw

Page 21: MongoDb In Action

Thanks!

Q&A