102. 什么是 MongoDB ?

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

  • 它支持的数据结构非常松散,是类似 jSON 的 BSON 格式,因此可以存储比较复杂的数据类型。
  • Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

综合来说,MongoDB 可以说是最棒的文档数据库。

? MongoDB的特点是什么?

  • 面向集合的存储:适合存储对象及 JSON 形式的数据。

    这个也是 MongoDB 和 MySQL 之间最基本的级别。

  • 动态查询:MongoDB 支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。

  • 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。

  • 查询监视:MongoDB 包含一个监视工具用于分析数据库操作的性能。

  • 复制及自动故障转移:MongoDB 数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。

  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。

  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

? 术语和概念?

MySQL 中的许多概念在 MongoDB 中具有相近的类比。本表概述了每个系统中的一些常见概念。

MySQL MongoDB
库 Database 库 Database
表 Table 集合 Collection
行 Row 文档 Document
列 Column 字段 Field
joins 嵌入文档或者链接
  • MongoDB 数据库,可以看成是一个电子化的文件柜,用户可以对文件中的数据运行新增、检索、更新、删除等操作。数据库是一个所有集合的容器,在文件系统中每一个数据库都有一个相关的物理文件。

  • MongoDB 集合,就是一组 MongoDB 文档。它相当于关系型数据库(RDBMS)中的表这种概念。集合位于单独的一个数据库中。一个集合内的多个文档可以有多个不同的字段。一般来说,集合中的文档都有着相同或相关的目的。

  • MongoDB 文档,由一组 key value 组成。文档是动态模式,这意味着同一集合里的文档不需要有相同的字段和结构。在关系型数据库中 Table 中的每一条记录相当于 MongoDB 中的一个文档。

    不过一般情况下,相同 Collection 下的 Document 字段是统一的。

? MySQL 与 MongoDB 的功能对比?

MySQL MongoDB
丰富的数据模型
动态 Schema
数据类型
数据本地化
字段更新
易于编程
复杂事务
审计
自动分片
  • 这是一个比较老的比较。
  • MySQL5.7 版本开始,也提供了 JSON 类型的数据格式。
  • MongoDB4.0 版本开始,也提供了事务功能。
  • 关于是否易于编程,这个看每个人的自己的想法,实际都还可以。