M05-MongoDB数据库核心知识

本文探讨MongoDB的数据库架构,介绍存储引擎如WiredTiger、MMAPv1及其实现机制,涵盖日志机制、文档模型与BSON、数据逻辑架构等内容,解析MongoDB在数据存储和管理方面的核心技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoDB数据库架构

在这里插入图片描述

MongoDB存储引擎

存储引擎负责管理数据存储,包括内存和磁盘,解决数据的存储和磁盘的交互
mongodb的存储引擎可以自由的替换,但是要符合mongoDB的API
在这里插入图片描述

mongoDB官方支持的存储引擎

WiredTiger是3.2之后默认使用的存储引擎:提高了更良好的锁并发机制,可以支持文档级别的锁
MMAPv1是3.2之前的使用的存储引擎,在锁机制这一块儿不是太好
In-Memory是企业版支持从存储引擎
Encrypted是企业版支持的存储引擎,加密存储引擎

第三方

RocksDB是facebook出的一个nosql存储引擎,主要是解决写入并发的性能,也可以结合mysql使用
TerarKDB是解决存储空间的优化和查询性能的优化
阿里云数据库mongoDB版扩展支持的存储引擎

命令查看服务状态信息

db.serverStatus()

查看服务引擎

db.serverStatus().storageEngine

db.serverStatus().storageEngine
{
“name” : “wiredTiger”,
“supportsCommittedReads” : true,
“oldestRequiredTimestampForCrashRecovery” : Timestamp(0, 0),
“supportsPendingDrops” : true,
“dropPendingIdents” : NumberLong(0),
“supportsSnapshotReadConcern” : true,
“readOnly” : false,
“persistent” : true,
“backupCursorOpen” : false
}

MongoDB数据逻辑架构

在这里插入图片描述
固定集合Capped:定义了一个集合容量(数据大小)固定,超过了运行淘汰,设定一个淘汰机制,例如先进先出,场景:数据排队的消息队列,在MongoDB内部做主从复制的时候,使用了base集合,使用固定容量大小的存储日志同步到从服务器

集合Collection

  1. 类似与关系型数据库中的表Table
  2. MogonDB数据库可以包含多个集合,一个集合可以包含多个文档(Document)
  3. 如果集合不存在,MongoDB会在保存第一条数据的时候创建
  4. 可以使用db.createCollection()创建集合
  5. 集合不限制文档doucment的字段架构
  6. MongoDB 3.2 开始可以启用Schema Validation 强制验证文档结构
  7. MongoDB还提供了Capped Collection 固定容量大小的集合
  8. db.createCollection(“log”,{capped:true,size:5242880,max:5000})
  9. max:5000 文档的个数,两个都指定满足一个就行
use deerlili
show collections
db.users.stats()
{
        "ns" : "deerlili.users",
        "size" : 1717,
        "count" : 22,
        "avgObjSize" : 78,
        "storageSize" : 36864,
        "capped" : false,
        "wiredTiger" : {
                "metadata" : {
                        "formatVersion" : 1
                }...
}

MongoDB文档模型与BSON

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

MongoDB文档模型设计原则

数据模型两种方式

Normalized 范式
Denormalized 反范式

MongoDB文档结构分为

引用式:也就是RDBMS中的外键关联
嵌入式:也就是Doucment文档中的内嵌结点

MongoDB日志Log机制(Journal)

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

配置文件

locate mongod.conf
一般在在/etc/mongod.conf

Mongod.conf 控制日志

在这里插入图片描述

深入MongoDB日志模式底层原理

在这里插入图片描述

控制WiredTiger日志持久化

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

MongoDB面试题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值