MongoDB 入门第一课:走进 MongoDB 的世界
1 什么是 MongoDB?
工欲善其事,必先利其器,在学习 MongoDB 的用法之前,我们先来学习一下 MongoDB 的概念。
MongoDB 是一个基于分布式文件存储的数据库,它由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似于 json 的 bson 格式,因此可以存储比较复杂的数据类型。Mongo 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2 MongoDB 与关系型数据库的不同
上面我们说过了,MongoDB 是非关系型数据库,也就是我们常说的 NoSQL,那它与关系型数据库(例如 MySQL)有什么不同呢?
我们可以来看下这张表,关系型数据库的表在 MongoDB 被称为集合,行被称为文档,其他的大体上一致。另外,MongoDB 的数据存储格式为基于 JSON 格式的 BSON,这点与传统的关系型数据库存在差异。
3 MongoDB 的特点
MongoDB 高性能、易部署、易使用,存储数据非常方便。
- MongoDB 是面向文档存储的,操作比较简单
- 可以在 MongoDB 中设置索引
- 提供了分片功能,即随着负载的增加,可以分布在计算机网络中的其他节点上
- 使用高效的二进制数据存储,包括大型对象
- 支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组
- MongoDB 会自动将 _id 字段设置为主键
- MongoDB 不支持表连接
- 模式*,对于存储在 MongoDB 中的文件,不需要知道它的任何结构定义,甚至我们可以把不同结构的文件存储在同一个数据库里
- 部分支持 SQL 语句
ObjectId
ObjectId 类似唯一主键,可用于生成和排序,速度较快,长度为12 bytes。
- 前 4 个字节表示创建 unix 时间戳
- 接下来 3 个字节是机器标识码
- 接下来 2 个字节是进程 id 组成 PID
- 最后三个字节是随机数
MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是 ObjectId 对象。
4 MongoDB 的适用场景
- 网站实时数据处理。MongoDB 非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性
- 由于其高性能,可以作为缓存
- 高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库
- 数据量为亿万级,或者需要不断扩容
- 需要每秒读写达到 2000 - 3000
- 需求易变,数据模型无法确定
5 MongoDB 不适用的场景
- 要求高度事务性的系统
- 复杂的跨文档(表)级联查询
- 百分之百写可用的场景:MongoDB 在换主节点时会出现短暂的不可写