本文章由博主学习阿里云MongoDB从入门到高级云上开发实战课程后整理的笔记,访问超链接即可了解更多内容
文章目录
3.MongoDB数据库核心知识
3.1 MongoDB数据库架构
3.1.1 MongoDB数据库体系架构
3.1.2 MongoDB数据逻辑架构
- MongoDB允许集合中的数据缺失或者修改,部分不一致,出现字段的删减与添加
- 一个MongoDB可以包含多个集合,一个集合可以包含多个文档
3.2 MongoDB存储引擎
存储引擎负责管理数据存储,包括内存和磁盘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引用
- 节约空间
- 关系灵活
- 数据更新时比较简单
- 需要从多个表读取数据
- Embedding内嵌
-
MongoDB存储引擎主要有哪些?
-
几种主流存储引擎的差异?优缺点?
-
MongoDB日志结构?
-
MongoDB恢复数据库数据的原理?
-
BSON如何保证数据的序列化?
-
MongoDB文档模型?
-
MongoDB文档模型优缺点?
-
如何控制MongoDB日志写入时间?