MongoDB是一款非关系型数据库,说到非关系型数据库,区别于关系型数据库最显著的特征就是没有SQL语句,数据没有固定的数据类型
MongoDB是一个文档数据库,记录的是一个文档,它是由字段和值对组成的数据结构。文档存在于集合中
- 文档是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行。
- 集合可以被看做没有模式的表
- 单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限
- 自带简洁的JavaScript shell
- 每个文档都有一个特殊的键 "_id",文档所处的集合里是唯一的
主要功能
- 高性能
- 嵌入式数据模型的支持减少了数据库系统的I/O活动
- 索引支持更快的查询,并且可以包含来自嵌入式文档的和数组的键
- 丰富的查询语言
- 高可用性(副本集)
- 自动故障转移
- 数据冗余
- 水平伸缩性(分片)
- 在一组计算机集群分布数据
- 支持多种存储引擎
- WiredTiger存储引擎
- 内存中存储引擎
- MongoDB提供可插拔的存储引擎API,允许第三方为MongoDB开发存储引擎
视图
MongoDB不会将视图内容持久化到磁盘上,不支持对视图的写入操作,只能进行读写操作。
上限集合
上限集合是固定大小的集合,它们支持高吞吐量操作,这些操作根据插入顺序插入和检索文档。一旦集合填充了其分配的空间,它就会通过覆盖集合中最旧的文档为新文档腾出空间。
文档
- 文档中的键值对是有序的 {"a":1,"b":2}与{"b":2,"a":1}是不同的文档(不重要,_id是唯一)
- 文档的值可以是字符串,也可以是其他类型,还可以是整个嵌入的文档
- 键不能含有
\0
,这个字符串用于表示键的结尾 - .和$有特别的意义,只有特定的环境才能使用
- 以下划线_开头的键是保留的,这个不是很严格
集合
一组文档,类似于表
集合是无模式的,集合里面的文档可以是各式各样的。
- 集合名不能是空字符串
- 集合名不能有
\0
- 不能以
system.
开头 - 不能含有保留字符$
- 组织集合的一种惯例是使用
.
字符分开的按命名空间划分的子集合。
数据库
特殊数据库
- admin 权限角度看,这是一个root数据库。将用户添加到这里,这个用户会自动继承所有数据库的权限,一些特定的服务器命令也只能从这个数据库运行
- local 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config config数据库在内部使用,用于保存分片的相关信息