http://zhufeng9282.blog.163.com/blog/static/2915910020120288572361/
NoSQL背景
数据高并发性的实时读取与写入
海量数据存储
海量数据的智能计算与挖掘
高性能,可扩展,可用性
正确认识NoSQL
NoSQL是用来区别关系型数据库的数据存储
NoSQL有灵活的Schema。
避免使用JOIN(连接)查询。
支持数据的水平扩展。
最终一致性
简单的访问接口(API)
主流NoSQL分类
面向文档的存储 ---MongoDB
Key-value的存储
列存储/列族(Column Store/Column Families)
MongoDB优势
不需要额外的缓存
丰富的查询
丰富的类型
内置replication和sharding,可扩展。
商业支持 10gen
MongoDB特性
面向文档的存储(BSON)
支持动态查询
索引
调优工具
区别于关系型数据库的更新(in-place)
Replication
Auto-sharding
MapReduce
MongoDB数据模型
database => collection => document
![MongoDB简介 - 暖殇 - 暖殇](http://img0.ph.126.net/IzwqL-7fNY3mz3nsPPFczA==/2389159602337264180.jpg)
MongoDB术语
RDBMS
Mongo
Table, View
Collection
Row(s)
JSON Document
Index
Index
Join
Embedded Document
Partition
Shard
Partition Key
Shard Key
MongoDB 数据类型
?JSON: null,布尔型(boolean),数字类型(numeric),字符串(string),数组(array),对象(object)
?BSON=JSON+
?二进制数据(binary data)
?数组(array)
{“comments”:[“哈哈”,”顶一下”]}
?内嵌文档(embedded document)
{“stuff”:{“name”:nicholas,age:27}}
?Object Id 当插入document的时候,MongoDB会自动设置一个_id做为key。
?字符串(String)
string类型是UTF-8编码的。
?日期类型(date)
MongoDB是以毫秒的形式来存储日期类型的。{“createDate”:new Date()}
安装
mongodb --dbpath=d:\mongo\db --logpath=d:\mongo\logs\mongo.log --install
增加:
db.thing.insert({name:'zhufeng',age:22})
查询:
*: db.thing.find()
where: db.thing.find({name:'zhufeng'})
$: db.thing.find({age:{$gt:13}}) $gt $lt $gte $lte
更新:
db.thing.update({name:'zhufeng'},{'$set':{name:'kevin'}})
删除:
db.thing.remove({age:{'$gt':24}})
db.thing.remove() --删除全部
关于 ObjectId
4f2673ac
d3f200
31e1
396830
4f2673b8
d3f200
31e1
396831
4f2673f9
d3f200
31e1
396832
timestamp(8) machine id(6)
process id(4)
counter(6)
索引
db.thing.ensureIndex({x:1,y:-1})
MapReduce-执行过程
?Map: key ->value 输出 的value为最终执行结果的聚合值
?Reduce:function reduce(key_obj, [value_obj, value_obj, ...]),处理[value1,value2,value3],可以循环处理,返回的是map的第二个参数。递归调用
?function finalize(key, value) -> final_value
–执行一次,一般用来处理平均数
?注意。Map的输出value和Reduce的返回value一致
GridFS
![MongoDB简介 - 暖殇 - 暖殇](http://img0.ph.126.net/4OpnYHT0s-FgEEygY21kVg==/673006669332397380.jpg)
GridFS需要两次查询:一次取出文件的元数据,另一次取出内容
允许相同的文件名存在
MD5校验文件完整性
MongoDB管理
db.addUser (username, password) db.removeUser(username)
db.addUser (username, password) db.removeUser(username)
db.currentOp()
db.killOp()
db.foo.stats()
db.foo.dataSize()
db.foo.storageSize()
db.foo.totalIndexSize()
db.foo.totalSize()