文章目录

  • 3.MongoDB数据库核心知识
  • 3.1 MongoDB数据库架构
  • 3.1.1 MongoDB数据库体系架构
  • 3.1.2 MongoDB数据逻辑架构
  • 3.2 MongoDB存储引擎
  • 3.3 集合Collection
  • 3.3.1 MongoDB集合(Collection)
  • 3.3.2 查询集合状态
  • 3.4 文档模型与BSON
  • 3.4.1 MongoDB文档模型
  • 3.4.1 MongoDB文档模型设计原则
  • 3.5 日志Log机制
  • 3.5.1 Mongodb日志Journal
  • 3.5.2 控制WiredTiger日志持久化
  • 3.6 MongoDB面试题


3.MongoDB数据库核心知识

3.1 MongoDB数据库架构

3.1.1 MongoDB数据库体系架构

3.1.2 MongoDB数据逻辑架构








MongoDB

Journal日志

Collection集合

Index索引

固定集合Capped

Document文档

Field字段


  • MongoDB允许集合中的数据缺失或者修改,部分不一致,出现字段的删减与添加
  • 一个MongoDB可以包含多个集合,一个集合可以包含多个文档

3.2 MongoDB存储引擎










MongoDB查询语言

MongoDB存储引擎

MMAPv1

WiredTiger

Encrypted

In-Memory

RocksDB

TerarkDB

其他引擎


存储引擎负责管理数据存储,包括内存和磁盘2各区域

  1. MongoDB官方支持的四种引擎:
  • MMAPv1为3.2版本之前默认引擎,WiredTiger为3.2版本之后默认引擎
  • EncryptedIn-Memory为企业付费版,Encrypted为加密引擎
  1. 阿里云数据库MongoDB版拓展支持的存储引擎
  • TerarkDB在提高压缩率的同时,解决存储空间以及查询性能的优化,RocksDB用于写入性能的优化

查询存储引擎的版本

db.serverStatus().storageEngine

3.3 集合Collection

3.3.1 MongoDB集合(Collection)

  • 类似于关系型数据库中的表Table
  • MongoDB数据库可以包含多个集合,一个集合可以包含多个文档( Document ) 1
  • 如果集合不存在, MongoDB会在保存第一条数据的时候创建集合
  • 可以使用db.createCollection()创建集合
  • 集合不限制文档Document的字段架构
  • MongoDB 3.2开始可以启用Schema Validation强制验证文档结构
  • MongoDB还提供了Capped Collection固定容量大小的集合 2
  • 使用命令行创建集合
db.createCollection("log", { capped : true, size : 5242880, max : 5000 })
  • size用于控制数据容量大小
  • max用于控制文档个数
  • 只要两个条件满足一个就会淘汰数据

3.3.2 查询集合状态

db.orders.stats() //orders is collection name

3.4 文档模型与BSON

3.4.1 MongoDB文档模型

  1. Document文档 ,类似于关系型数据库中的行Row ,数据基本单元
  2. 文档结构类似于JSON文档 ,存储键值对Key-Value数据
  3. MongoDB保存数据的基本格式是BSON Document
  4. BSON是二进制JSON ,目的节约存储空间
  5. MongoDB的文档支持更丰富的数据类型
  6. _id是默认的主键 ,使用的是ObjectId类型保证唯一, 也可以自定义
  7. 字段存储有特定的顺序 ,允许嵌套复杂类型,如文档类型的数据
  8. 除了数据使用文档、查询、过滤、索引管理等功能也全部使用文档
  9. BSON文档大小有 16M的限制
  10. 超出16M限制的数据可以使用GridFS存储

3.4.1 MongoDB文档模型设计原则

数据模型的两种方式:

  1. Normalized 范式
  2. Denormalized 反范式

Mongodb文档结构分为:

  1. 引用方式:也就是RDBMS中的外键关联
  2. 嵌入式:也就是Ducoment文档中的内嵌节点

3.5 日志Log机制

3.5.1 Mongodb日志Journal

  • 为了防止突发故障导致的数据丢失, MongoDB提供了日志机制
  • WiredTiger使用写前日志write-ahead transaction logCheckpoint检查点一起来确保数据正确持久性
  • 如果MongoDB日志存在检查点,就使用日志重放修改直到上一一个检查点
  • 日志使用了snappy压缩库
  • 最小日志大小128字节,小于此大小不启用压缩.
  • 单节点,不启用日志,可能导致数据修改丢失
  • WiredTiger引擎日志默认100毫秒刷一次磁盘,日志文件最大100M ,超过会自动创建新文件

3.5.2 控制WiredTiger日志持久化

  1. MongoDB的日志在DbPath目录下的Journal目录下
  2. 启动参数–journal开启使用–nojournal 关闭,也可以配置文件关闭
  3. WiredTiger默认提交日志时间是间隔100毫秒
  4. 3.2版本WiredTiger写入日志间隔默认50毫秒
  5. 3.6以后WiredTiger设置检查点间隔是60秒
  6. 如果写入操作设置了j: true ,引擎会立即写磁盘
  7. 日志大小是100 MB ,写满以后,重新创建日志文件
  8. 如果强制关闭Mongod进程可能会导致日志丢失
  9. 使用storage.journal.commitIntervalMs控制间隔
  10. In-Memory引擎不支持此参数
  11. MMAPv1引擎默认提交日志时间是间隔30毫秒
  12. WiredTiger引擎自动删除直到上一个CheckPoint的日志文件

3.6 MongoDB面试题

  1. Document内嵌VS引用
  • Embedding内嵌
  • 快速读取
  • 数据冗余
  • 数据更新时较为复杂
  • Linking引用
  • 节约空间
  • 关系灵活
  • 数据更新时比较简单
  • 需要从多个表读取数据
  1. MongoDB存储引擎主要有哪些?
  2. 几种主流存储引擎的差异?优缺点?
  3. MongoDB日志结构?
  4. MongoDB恢复数据库数据的原理?
  5. BSON如何保证数据的序列化?
  6. MongoDB文档模型?
  7. MongoDB文档模型优缺点?
  8. 如何控制MongoDB日志写入时间?

  1. 数据封装的基本单位,要区别于Word文档 ↩︎
  2. 当超过容量,会删除最早进入的数据,先进先出 ↩︎