Mongodb学习总结

官方文档

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 <:port> -d dbname
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

理论学习(基本概念)

  1. 基本类型

    对应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
  1. 文档:是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 计数器
  1. 集合:指一组文档(类似于关系数据库的表),可以看成没有模式的表

    • 集合是无模式的,文档的格式可以不一样。如{“name”:”egger”},{“age”:18}可以在一个集合中。一般来说,这种情况还是推荐改成多个集合
      • 把各种各样的模式的文档混在一起,对开发和维护都会产生麻烦
      • 在几个查询速度上会折损
      • 创建索引的时候,会附加结构,尤其是唯一索引,模式一样会更加高效
    • 命名,用utf-8字符串来表示集合,有下列要求
      • 集合名不能有空字符串
      • 集合名不能含有\0,这个表示集合名的结束
      • 集合名不能以”system.”开头,这个是为系统集合保留的前缀
      • 用户创建的集合名不能呢个含有保留字符
    • 子集合

      组织集合的一种惯例是使用”.”字符分开的按命名空间划分的子集合。在MongoDB中使用子集合来组织数据是很好的方法。

      例如,一个个人信息可能包含两个集合,分别是person.name和person.age。这样做的目的只是为了使组织结构更好些,也就是说person这个集合(这里根本就不需要存在)及其子集合没有任何关系。把数据库的名字放到集合名前面,得到就是集合的完全限定名,称为命名空间。命名空间的长度不得超过121字节,在实际使用当中应该小于100字节。

      很多MongoDB工具中都包含子集合。

      • GridFS是一种存储大文件的协议,使用子集合来存储文件的元数据,这样就与内容块分开了
      • MongoDB的Web控制台通过子集合的方式将数据组织在DBTOP部分.
      • 绝大多数驱动程序都提供语法糖,为访问指定集合的子集合提供方便。
  2. 数据库

    MongoDB中多个集合可以组成一个数据库。mongodb的单个实例可以容纳多个独立的数据库,每个都有自己的集合和权限,不同的数据库放在不同的文件中。

    数据库也通过名字来标识。为满足以下条件的utf-8字符串

    • 不能是空字符串
    • 不得含有’ ‘(空格)、.、$、/、\和\0 (空宇符)
    • 应全部小写
    • 最多64个字节

      有一些数据库名是保留的,可以直接访问这些特殊作用的数据库

    • admin

      从权限的角度来看,这是“root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

    • local

      这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合

    • config

      当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

客户端驱动

待补充

实现原理

http://shift-alt-ctrl.iteye.com/blog/2255580

工具

待补充