Date post: | 12-Nov-2014 |
Category: |
Technology |
Upload: | fuchaoqun |
View: | 16,471 times |
Download: | 0 times |
MongoDB In Action
超群 .com@fuchaoqun
http://www.fuchaoqun.com
I will talk ….
•About MongoDB
•Dynamic querys
•Replication
•Sharding
•GridFS
•Performance
About MongoDB?
•Document-oriented
•JSON-style documents
•Schema-free
•Written in C++ for high
performance
•Scalable
•MapReduce
•Many supported platforms
& languages
Dynamic querysSelect
MySQL: SELECT * FROM user
Mongo: db.user.find()
MySQL: SELECT * FROM user WHERE name = 'foobar'
Mongo: db.user.find({'name' : 'foobar'})
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]'})
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 : !=
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
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)
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)
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}})
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
So….
MongoDB can do almost everything that MySQL can do,
and quicker & smarter
Replication
•Master-Slave Replication
•Replica Pairs
•Limited Master-Master Replication
Sharding
GridFS•files: object metadata
•chunks: binary data
Use GridFS In PHP
GridFS Projects
•nginx-gridfs
http://github.com/mdirolf/nginx-gridfs
•gridfs-fuse
http://github.com/mikejs/gridfs-fuse
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.
Thanks!
Q&A