文章目录
- 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各区域
- MongoDB官方支持的四种引擎:
- MMAPv1为3.2版本之前默认引擎,WiredTiger为3.2版本之后默认引擎
- Encrypted、In-Memory为企业付费版,Encrypted为加密引擎
- 阿里云数据库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文档模型
- Document文档 ,类似于关系型数据库中的行Row ,数据基本单元
- 文档结构类似于JSON文档 ,存储键值对Key-Value数据
- MongoDB保存数据的基本格式是BSON Document
- BSON是二进制JSON ,目的节约存储空间
- MongoDB的文档支持更丰富的数据类型
- _id是默认的主键 ,使用的是ObjectId类型保证唯一, 也可以自定义
- 字段存储有特定的顺序 ,允许嵌套复杂类型,如文档类型的数据
- 除了数据使用文档、查询、过滤、索引管理等功能也全部使用文档
- BSON文档大小有 16M的限制
- 超出16M限制的数据可以使用GridFS存储
3.4.1 MongoDB文档模型设计原则
数据模型的两种方式:
- Normalized 范式
- Denormalized 反范式
Mongodb文档结构分为:
- 引用方式:也就是RDBMS中的外键关联
- 嵌入式:也就是Ducoment文档中的内嵌节点
3.5 日志Log机制
3.5.1 Mongodb日志Journal
- 为了防止突发故障导致的数据丢失, MongoDB提供了日志机制
- WiredTiger使用写前日志write-ahead transaction log和Checkpoint检查点一起来确保数据正确持久性
- 如果MongoDB日志存在检查点,就使用日志重放修改直到上一一个检查点
- 日志使用了snappy压缩库
- 最小日志大小128字节,小于此大小不启用压缩.
- 单节点,不启用日志,可能导致数据修改丢失
- WiredTiger引擎日志默认100毫秒刷一次磁盘,日志文件最大100M ,超过会自动创建新文件
3.5.2 控制WiredTiger日志持久化
- MongoDB的日志在DbPath目录下的Journal目录下
- 启动参数–journal开启使用–nojournal 关闭,也可以配置文件关闭
- WiredTiger默认提交日志时间是间隔100毫秒
- 3.2版本WiredTiger写入日志间隔默认50毫秒
- 3.6以后WiredTiger设置检查点间隔是60秒
- 如果写入操作设置了j: true ,引擎会立即写磁盘
- 日志大小是100 MB ,写满以后,重新创建日志文件
- 如果强制关闭Mongod进程可能会导致日志丢失
- 使用storage.journal.commitIntervalMs控制间隔
- In-Memory引擎不支持此参数
- MMAPv1引擎默认提交日志时间是间隔30毫秒
- WiredTiger引擎自动删除直到上一个CheckPoint的日志文件
3.6 MongoDB面试题
- Document内嵌VS引用
- Embedding内嵌
- 快速读取
- 数据冗余
- 数据更新时较为复杂
- Linking引用
- 节约空间
- 关系灵活
- 数据更新时比较简单
- 需要从多个表读取数据
- MongoDB存储引擎主要有哪些?
- 几种主流存储引擎的差异?优缺点?
- MongoDB日志结构?
- MongoDB恢复数据库数据的原理?
- BSON如何保证数据的序列化?
- MongoDB文档模型?
- MongoDB文档模型优缺点?
- 如何控制MongoDB日志写入时间?
- 数据封装的基本单位,要区别于Word文档 ↩︎
- 当超过容量,会删除最早进入的数据,先进先出 ↩︎