M05-MongoDB数据库核心知识

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

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日志写入时间?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值