MongoDB概述
MongoDB是一个高性能、高可用的、自动伸缩的开源的文档型数据库。MongoDB数据库把文档存在集合(collection)中。集合中的文档它们不需要相同的schema,每个文档都可以有不同的schema。 这使得MongoDB比传统的RDBMS更灵活,因为你不用为预先定义schema而操心。
如图所示:
Document 数据库
在MongoDB中一条记录就是一个document,是由 field 和值这样的键值对组成的数据结构。MongoDB的document类似于一个JSON对象,document中的 field 的值也可以包括其他的document ,数组和 document的数组。下图就是一个document的样例:
使用 document 的优点:
- 可以与许多编程语言中的本地数据类型相对应
- 由于document支持嵌套,这样可以减少类似关系型数据库中的表连接操作,减少了性能开销
- 动态的schema相对关系型数据的表的schema有更大的灵活度,比如方便的提供多态的特性
关键特性
高性能
MongoDB提供高性能的数据持久化。特别是:
- 支持嵌入的数据模型可以减少 I/O的操作
- 通过索引支持更快的查询,并且索引对嵌入的document和数组也有作用
丰富的查询语言
MongoDB提供丰富的查询语言支持CRUD的读写操作,并且还支持:
- 聚合管道,是一个基于数据处理管道概念的数据聚合的框架
- 全文检索和地理化信息查询
高可用
MongoDB的复制机制又称 replica set (副本集),提供:
- 自动故障转移
- 数据冗余备份
一个副本集是一组MongoDB服务器,它们维护相同的数据集,提供冗余和增加数据可用性。
水平扩充
MongoDB提供了水平的可伸缩性作为其核心功能的一部分:
- 可以在一个集群的机器上进行数据切片
- 从3.4开始,MongoDB支持基于分片键创建数据区(Zone)。在一个负载均衡的集群中,MongoDB读写操作可以只涉及到数据区内的那些分片数据。
支持多个存储引擎
MongoDB支持以下存储引擎:
- WiredTiger 存储引擎 (包括支持空闲时密 ,这是Mongo默认的存储引擎)
- In-Memory 存储引擎
- MMAPv1存储引擎 (4.0版本被弃用)
此外,MongoDB还提供了可插入的存储引擎API,允许第三方为MongoDB开发存储引擎。