官方文档
https://www.mongodb.com/
http://docs.mongoing.com/index.html
http://www.mongodb.org.cn/
mongo的安装
1. 下载社区版本 https://www.mongodb.com/download-center?jmp=navcommunity
2. 安装目录下有哪些程序
程序 | 说明 | 使用说明 |
---|---|---|
mongo | mongo客户端 | 默认连接local:27017 用–help查看帮助 |
mongod | mongo服务器 | 要先建立dbpath才能启动,可以用命令行创建,也可以根据服务器的配置来创建(一般配置systemLog和stroage:dbPath,使用yaml格式)。用mongod –install(-f configpath)在windows下注册成服务 |
mongodump | 数据库备份 | mongodump -h dbhost -d dbname -o dbdirectory |
mongorestore | 数据库恢复 | mongorestore -h |
mongoexport | 集合备份 | mongoexport -d test -c students -o students.dat |
mongoimport | 集合恢复 | mongoimport -d test -c students students.dat |
mongofiles | 存取文件 | mongofiles put E:xxx.data/mongofiles get E:xxx.data |
mongooplog | oplog重放 | mongooplog –port 20001 -u* –authenticationDatabase=admin –from=172.16.201.73:27017 |
mongoperf | 独立检查mongoDB的I/O性能工具 | |
mongos | 集群工具 | |
mongostat | 状态监控工具 | |
mongotop | 性能监控工具 |
shell命令
操作类型 | 命令 | 说明 |
---|---|---|
增 | insert | |
删 | remove | |
查 | find | 更加复杂的有条件查询:比较查询操作符,逻辑查询操作符,元素查询操作符,评价查询查询操作,Geospatia查询操作符,数组查询操作符,位查询操作符 |
改 | update | 字段更新操作符,数组更新操作符,位更新操作符 |
聚合 | group查询操作符,管道聚合阶段 |
大类 | 说明 |
---|---|
Collection | https://docs.mongodb.com/manual/reference/method/#collection |
Replication | … |
Cursor | … |
Sharding | … |
Database | … |
Subprocess | … |
Query Plan Cache | … |
Constructors | … |
Bulk Write Operation | … |
Connection | … |
User Management | … |
Native | … |
Role Management | … |
理论学习(基本概念)
基本类型
对应bjson的格式
类型 | 类型 | 编号 |
---|---|---|
Double | 双精度 | 1 |
String | 字符串 | 2 |
Object | 对象 | 3 |
Array | 数组 | 4 |
Binary data | 二进制对象 | 5 |
Object id | 对象id | 7 |
Boolean | 布尔值 | 8 |
Date | 日期 | 9 |
Null | 未定义 | 10 |
Regular Expression | 正则表达式 | 11 |
JavaScript | JavaScript代码 | 13 |
Symbol | 符号 | 14 |
JavaScript (with scope) | JavaScript代码(带范围) | 15 |
32-bit integer | 32 位整数 | 16 |
Timestamp | 时间戳 | 17 |
64-bit integer | 64 位整数 | 18 |
Min key | 最小键 | 255 |
Max key | 最大键 | 127 |
文档:是mongodb中数据的基本单元(类似于关系数据库的行,但比行要复杂),多个键及其关联的值放在一起就是文档。mongodb文件存储格式为bjson。
- 示例{“firstName”:”egger”,”lastName”:”wong”}
- 文档中的健/值是有序的
- 文档中的值不仅可以是在双引号里的字符串,还可以是其他的类型,包括文档
- mongodb区分类型和大小写
- mongodb的文档不能有重复的键
- 文档的键是字符串,除了少数情况,键可以使用任意的utf-8字符
- 键不能含有\0,这个表示键的结束
- .和$有特别的意义,只能在特定的环境下使用
- 以下划线”_”开头的键是保留的(非严格要求)
每个文档都有一个objectid,由客户端驱动生成,由”_id”表示
ObjectId占用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串。由“时间戳” 、“机器名”、“PID号”和“计数器”组成。使用机器名的好处是在分布式环境中能够避免单点计数的性能瓶颈。使用PID号的好处是支持同一机器内运行多个mongod实例。最终采用时间戳和计数器的组合来保证唯一性
- 时间戳 4个字节。从标准纪元开始,单位为秒
- 机器名 3个字节。所在主机的唯一标识符。通常是机器主机名的散列值,机器名通过Md5加密后取前三个字节
- PID 2个字节。为了确保在同一台机器上并发的多个进程产生的Objectld是唯一的,所以加上进程标识符(PID).注意到每次重启mongod进程后PID号通常会发生变化就可以了
- 计数器 3个字节,表示的取值范围就是256256256=16777216。一个自动增加的计数器,确保相同进程同一秒产生的Obj ectld也是不一样的同一秒钟最多允许每个进程拥有2563 (16 777 216)不同的Objectld
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
时间戳 | 机器名 | PID | 计数器 |
集合:指一组文档(类似于关系数据库的表),可以看成没有模式的表
- 集合是无模式的,文档的格式可以不一样。如{“name”:”egger”},{“age”:18}可以在一个集合中。一般来说,这种情况还是推荐改成多个集合
- 把各种各样的模式的文档混在一起,对开发和维护都会产生麻烦
- 在几个查询速度上会折损
- 创建索引的时候,会附加结构,尤其是唯一索引,模式一样会更加高效
- 命名,用utf-8字符串来表示集合,有下列要求
- 集合名不能有空字符串
- 集合名不能含有\0,这个表示集合名的结束
- 集合名不能以”system.”开头,这个是为系统集合保留的前缀
- 用户创建的集合名不能呢个含有保留字符
子集合
组织集合的一种惯例是使用”.”字符分开的按命名空间划分的子集合。在MongoDB中使用子集合来组织数据是很好的方法。
例如,一个个人信息可能包含两个集合,分别是person.name和person.age。这样做的目的只是为了使组织结构更好些,也就是说person这个集合(这里根本就不需要存在)及其子集合没有任何关系。把数据库的名字放到集合名前面,得到就是集合的完全限定名,称为命名空间。命名空间的长度不得超过121字节,在实际使用当中应该小于100字节。
很多MongoDB工具中都包含子集合。
- GridFS是一种存储大文件的协议,使用子集合来存储文件的元数据,这样就与内容块分开了
- MongoDB的Web控制台通过子集合的方式将数据组织在DBTOP部分.
- 绝大多数驱动程序都提供语法糖,为访问指定集合的子集合提供方便。
- 集合是无模式的,文档的格式可以不一样。如{“name”:”egger”},{“age”:18}可以在一个集合中。一般来说,这种情况还是推荐改成多个集合
数据库
MongoDB中多个集合可以组成一个数据库。mongodb的单个实例可以容纳多个独立的数据库,每个都有自己的集合和权限,不同的数据库放在不同的文件中。
数据库也通过名字来标识。为满足以下条件的utf-8字符串
- 不能是空字符串
- 不得含有’ ‘(空格)、.、$、/、\和\0 (空宇符)
- 应全部小写
最多64个字节
有一些数据库名是保留的,可以直接访问这些特殊作用的数据库
admin
从权限的角度来看,这是“root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local
这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config
当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
客户端驱动
待补充
实现原理
http://shift-alt-ctrl.iteye.com/blog/2255580
工具
待补充