MongoDB的结构
MongoDB的组成结构如下:
数据库包括集合,集合包括文档,文档包含一个或者多个键值对。
数据库:
一个MongoDB的服务器实例可以承载多个数据库,而且数据库之间是相互独立的。
数据库的命名应该符合文件的命名。
MongoDB有一些自带的数据库:
- admin:超级管理员的数据库,添加用户权限,执行一些特定的服务端命令
- local:不能被复制,用来存储限于本地单台服务器的任意集合
- config:用于分片设置时,相关信息的存储
集合:
集合就是一组文档:相当于mysql中的一个表
集合的特点是:无模式,不需要设计结构,只需要满足文档的存储格式就可以存储,及时它们的键名不同,非常灵活。
命名:正常的命名即可,不能是“”,不能含\0,不能以“system.”开头(系统保留),不能含有保留字符$
固定集合:
MongoDB的固定集合(Capped collections)是性能出色且有着固定大小的集合,如果空间不足,最早的文档将会被删除,为新的文档腾出地方。
Capped的属性特点
- 插入速度极快
- 按照插入顺序查询输出速度极快
- 能够在插入最新数据时,淘汰最早的数据
- 默认查询情况,按照插入返回
- 更新不能超过总限额
- 不允许删除
- 在32位的机器上最大值为482.5M,64位上受系统文件的限制
Capped的应用场景
- 存储日志信息
- 缓存一些少量的文档
文档:
文档是MongoDB的基本单位。键值对按照BSON格式存入MongoDB就是一个文档。
文档的特点:
- 都有一个特殊的键“_id”,它是唯一的
- 键值对是有序的
- 值可以是字符串,数值,日期
- 区分大小写
- 键值对是唯一的
数据类型:
基本数据类型:
- null
- 布尔
- 32位整数
- 64位整数
- 字符串
- 对象
- 日期
- 正则
- 代码
- 二进制
- 未定义:undefined
- 数组
- 内嵌文档
- Decimall28
数字类型:
在MongoDB中使用数字类型需要注意精度和极限值的问题,特别是金额等敏感性数字需要使用128位的Decimal类型才不会导致精度丢失而造成数值变化。
日期类型:
在MongoDB中保存的日期类型是ISODate,默认情况下MongoDB中存储的是标准的时间。有一些语言的驱动可能会自动加上8个小时。
数组类型:
在MongoDB中可以存入JSON数组。
内嵌文档:
把整个MongoDB文档作为另一个文档中键的值称为内嵌文档。
自动关联的内嵌文档DBRef:
按照规范格式来存储关联id,MongoDB就会自动实现关联。
_id键和ObjectId:
_id是MongoDB中的唯一标识,ObjectId是它的默认格式。
ObjectId使用12个字节的存储空间,显示出来是一个24位的字符串,他可以保证部署在多个机器上的_id不重复。
ObjectId的创建方式:0-3:时间戳,4-6:机器,7-8:PID,9-11:计时器
二进制类型:最大不能超过16M
索引:
提高查询速率,帮助排序