【DBA课程-笔记】第 3 章:MongoDB数据库核心知识

news2024/10/6 14:34:04

内容

一、MongoDB 数据库架构

A. MongoDB数据库体系架构

1. 存储引擎(MongoDB Storage Engines):

2. MongoDB 数据逻辑架构

二、MongoDB 存储引擎

A. 查看mongodb服务器的状态

B. 查看引擎信息(4.2.1 没有这个命令)

C. 查看 - 集合状态(包含引擎信息)

三、集合 Collection

A. 创建集合

 B. 查看集合状态

 C. 查看集合所有文档 + 美化

四、文档模型 与 BSON

A. MongoDB 文档模型

B. MongoDB文档模型设计原则

1.数据模型两种方式

2. Mongodb文档结构分为

2-1:引用方式

2-2:嵌入式 (文档嵌套)

五、日志Log机制(数据安全问题)

A. Mongodb 日志Journa

B. Mongod.conf 控制日志

 C. 深入MongoDB日志模式底层原理

D. 控制WiredTiger日志持久化

E. 配置文件 mongod.conf 

1. 地址

2. 内容说明

3. windows带日志下--服务器启动(演示)

六、MongoDB 总结

A. Document 内嵌 VS 引用 优缺点

B. MongoDB存储引擎主要有哪些 ?C. 几种主流存储引擎的差异?优缺点?D. MongoDB日志结构 ?E. MongoDB恢复数据库数据的原理?F. BSON如何保证数据的序列化?G. MongoDB文档模型 ?H. MongoDB文档模型优缺点?I. 如何控制MongoDB日志写入时间?


一、MongoDB 数据库架构

A. MongoDB数据库体系架构

1. 存储引擎(MongoDB Storage Engines):

  • WiredTiger (对处理读写,并发更灵活)
  • MMAPv1
  • In-Memory (企业版使用)
  • Encrypted
  • 3rd Party Engine

2. MongoDB 数据逻辑架构

  • 二进制BSON文档
  • Journal 日志:性能优化
  • Index 索引:查询优化
  • Collection:
  • Capped:可以模拟数据排队的消息队列
  • 语言执行引擎:

二、MongoDB 存储引擎

  • 作用:解决数据存储和磁盘的交互,以及索引机制,大量IO操作
  • 存储引擎负责管理数据存储,包括内存和磁盘2个区域

引擎名说明描述
MMAPV1【官方】3.0之前版本
WiredTiger【官方】3.0之后版本(默认)锁机制提升性能
Encrypted【官方】企业版
In-Memory【官方】企业版
RocksDBFacebook可以结合mongodb,以及mysql一起使用写入性能优化
TerarkDB字节跳动工程团队存储空间 + 查询性能优化
其他引擎

如: 阿里云提供支持,RocksDB 和 TerarkDB,

WiredTiger默认

A. 查看mongodb服务器的状态

db.serverStatus()

B. 查看引擎信息(4.2.1 没有这个命令

db.serverStatus().storgeEngine

C. 查看 - 集合状态(包含引擎信息

db.users.stats()

三、集合 Collection

  • 类似于关系型数据库中的表 Table
  • MongoDB 数据库可以包含多个集合一个集合可以包含多个文档( Document)
  • 如果集合不存在,MongoDB会在保存第一条数据时自动创建集合(懒创建)
  • 可以使用 db.createCollection0 创建集合
  • 集合不限制文档Document的字段架构
  • MongoDB 3.2开始 可以启用 Schema Validation 强制验证文档结构
  • MongoDB还提供了Capped Collection固定容量大小的集合

A. 创建集合

  • 创建集合名为:log
  • 固定容量大小:5242880 ,单位字节
  • 文档个数: max:5000 ,表示最多5000个文档
db.createCollection("log",{ capped : true, size : 5242880, max : 5000 })

 B. 查看集合状态

db.users.stats()

 C. 查看集合所有文档 + 美化

db.users.find().pretty()

四、文档模型 与 BSON

A. MongoDB 文档模型

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

B. MongoDB文档模型设计原则

1.数据模型两种方式

  • Normalized 范式 (设计标准,为了节省磁盘空间
  • Denormalized 反范式(随着磁盘价格大幅度下降,为了追求性能,不计成本累加硬件


2. Mongodb文档结构分为

  • 范式】引用方式 : 也就是RDBMS中的外键关联
  • 反范式】嵌入式 : 也就是Ducoment文档中的内嵌节点 

2-1:引用方式

2-2:嵌入式 (文档嵌套

五、日志Log机制(数据安全问题)

A. Mongodb 日志Journa

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

B. Mongod.conf 控制日志

  • 启动日志
  • 日志路径:/data/db/journal

 C. 深入MongoDB日志模式底层原理

  • Shared View:共享内存数据视图
  • 数据写入周期是60S

D. 控制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. 日志大小是100MB,写满以后,重新创建日志文件
  8. 如果强制关闭Mongod进程可能会导致日志丢失
  9. 使用storage.journal.commitIntervalMs控制间隔
  10. In-Memory引擎不支持此参数 (控制持久化参数)
  11. MMAPv1引擎默认提交日志时间是间隔30毫秒
  12. WiredTiger引擎自动删除直到上一个CheckPoint的日志文件

E. 配置文件 mongod.conf 

1. 地址

  • linux下:/etc/mongod.conf
  • docker中:/data/configdb/ ,一般默认没有,可以通过部署时映射到该目录下

2. 内容说明

  • dbpath :数据库文件存放目录
  • path:日志存放目录
  • port:端口号
  • bindip : 0.0.0.0 允许外部容器访问 ,注:不要写127.0.0.1
  • auth : 不使用密码账户登录
# Where and how to store data.
storage:
  dbPath: /mnt/mongodb/data
  journal:
    enabled: true
systemLog:
  destination: file
  logAppend: true
  path:  /mnt/mongodb/logs/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

#auth 

auth:false

3. windows带日志下--服务器启动(演示)

  • linux/docker 默认自动启动服务器
# 服务器启动(默认开启日志)
mongod.exe --dbpath "c:\\MongoDB\data\db" --logpath "C:\\MongoDB\data\log\mongo.log"

# 服务器启动(开启日志)
mongod.exe --dbpath "c:\\MongoDB\data\db" --journal --logpath "C:\\MongoDB\data\log\mongo.log"

# 服务器启动(关闭日志)
mongod.exe --dbpath "c:\\MongoDB\data\db" --nojournal --logpath "C:\\MongoDB\data\log\mongo.log"

# 客户端启动
mongo.exe --port 27017

六、MongoDB 总结

A. Document 内嵌 VS 引用 优缺点

内嵌引用
优点快速读取节约空间
关系灵活
数据更新时候比较简单
缺点数据冗余
数据更新时候比较复杂
需要从多个表读数据

B. MongoDB存储引擎主要有哪些 ?
C. 几种主流存储引擎的差异?优缺点?
D. MongoDB日志结构 ?
E. MongoDB恢复数据库数据的原理?
F. BSON如何保证数据的序列化?
G. MongoDB文档模型 ?
H. MongoDB文档模型优缺点?
I. 如何控制MongoDB日志写入时间?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构(王道)——顺序表的定义

线性表和顺序表的关系: 两种实现方式:静态分配、动态分配 总结:

Node.js 版本管理工具 n 使用指南

Node.js 版本更新很快,目前 node v20.x 已经发布,我们在使用时避免不了会需要切换不同的 Node.js 的版本来使用不同版本的特性。 所以就出现了像 windows 上的 nvm,MacOS 上的 n 工具,本文就介绍一下如何使用 n 管理 Node.js 的版…

Linux专栏(一)——VMware的下载与安装

一、背景 想要学习Linux系统但又不想经历安装双系统复杂的操作,可以试试虚拟机方案。只是虚拟机方案不可以调用GPU就非常的无语,作为初学者学习还是非常不错的! 注意:倘若真正转入Linux系统,安装双系统或者单Linux才是…

Vue2配置在methods中的方法属性丢失

Vue2配置在methods中的方法属性丢失 需求 现在有这样一个需求:一个带有搜索建议的搜索框,搜索建议由后端数据请求回来。当搜索框失去焦点时,应该取消搜索,直接使用输入的内容。 实现 实现原理为防抖加取消: //deb…

小程序 wxchart 使用简单入门

官方参考: Example - wxCharts使用说明 Issue #58 xiaolin3303/wx-charts GitHub 引入 地址:GitHub - xiaolin3303/wx-charts: 微信小程序图表charts组件,Charts for WeChat Mini Program 把clone下来的文件里dist下面的wxcharts.js或…

快手直播间数据采集截流软件脚本,实时采集引流精准获取客源【采集脚本+引流技术教程】

脚本功能:可查观众的块手号,二维码,主页,实时的弹幕消息,以及直播间送出的礼物,实时切换榜首的信息。​ 设备需求:电脑 文章的来源:ZZZZ.LA 文章分享者:Linxiaoyu2022 文…

Python微实践 - 诗意书香,宋风雅韵

诗意书香,宋风雅韵,宋代的文人们或婉约,或豪放,为后世留下了不朽的文学遗产 —— 宋词。宋词本质上是用于合乐的歌词,词人在填词时用的曲调名即为词牌。各位读者在中学时期一定对“水调歌头”、“念奴娇”这些词牌名耳…

mybatis-plus 实现自动填充

文章目录 1、自定义实现类 MyMetaObjectHandler2、在entity中标记需要自动填充的属性3、FieldFill中有哪些字段 1、自定义实现类 MyMetaObjectHandler import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apach…

【Python】PyCharm中调用另一个文件的函数或类

🎉欢迎来到Python专栏~PyCharm中调用另一个文件的函数或类 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:Python学习专栏 文章作者技术和水平有限,如果文中出现错误&…

SOKIT软件的使用

1.模拟客户端向服务器发送报文 客户端---->TCP连接---->填写数据----->点击“发送” 2.模拟服务器接受报文 服务器---->设置IP地址与端口---->点击TCP侦听 就可以往该地址发送报文信息了

需求分析案例:全局错误码设计

本文介绍了我在一些业务系统中遇到的错误提示问题,以及进行需求分析和设计实现的过程,欢迎进行交流和指点,一起进步。 1、需求起源 作为程序员,或多或少,都经历过如下场景: 场景1: 产品经理&a…

Stable Diffusion 用2D图片制作3D动态壁纸

如果想让我们的2D图片动起来可以使用stable-diffusion-webui-depthmap-script插件在SD中进行加工让图片动起来。 这是一个可以从单个图像创建深度图,现在也可以生成3D立体图像对的插件,无论是并排还是浮雕。生成的结果可在3D或全息设备(如VR耳机或Looking Glass显示器)上查…

LabVIEW和Web Service交互方式?LabVIE本地项目如何发布到互联网上让外网访问

LabVIEW全称Laboratory Virtual Instrument Engineering Workbench, 是一种图形化编程语言(通常称为G语言),即实验室虚拟仪器集成环境。LabVIEW 经过多年的持续创新,已经从单纯的仪器控制软件发展成为面向设计、测量和控制的综合性图形化开发…

【设计模式】循序渐进的理解观察者模式Spring事件机制的运用

文章目录 1. 概述2.循序渐进的理解观察者模式2.1 观察者模式概念引入2.2.观察者接口抽象2.3 被观察者接口抽象2.4 观察者模式的通用类图2.5.观察者模式的通用代码实现 3.Spring中的事件运用3.1.Spring事件中的几个角色介绍3.2.代码实现 4.总结 1. 概述 观察者模式(…

RabbitMQ高阶使用

1. 问题 2. 延时任务 2.1 什么是延时任务 在当前时间往后延迟多少时间执行的任务 2.1.1 和定时任务区别 定时任务有明确的触发时间,延时任务没有定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期定时任务一般执行的…

生命周期函数和wxs脚本

生命周期函数和wxs脚本 1. 生命周期函数1.1. 应用的生命周期函数1.2. 页面的生命周期函数 2. wxs脚本2.1. wxs与JavaScript的关系2.2. wxs内嵌脚本2.3. wxs外联脚本2.4. tips 1. 生命周期函数 1.1. 应用的生命周期函数 应用的生命周期函数:指小程序从启动 -> 运…

【每日算法】【226. 翻转二叉树】

☀️博客主页:CSDN博客主页 💨本文由 我是小狼君 原创,首发于 CSDN💢 🔥学习专栏推荐:面试汇总 ❗️游戏框架专栏推荐:游戏实用框架专栏 ⛅️点赞 👍 收藏 ⭐留言 📝&…

熔断与降级的那些事

什么熔断 熔断(Circuit Breaker)是一种用于限制系统请求的机制,其目的是防止系统在发生故障或异常情况下继续执行无效的调用,从而避免雪崩效应和进一步的系统损害。 熔断器通常用于分布式系统中的微服务架构中,它负责…

taro3 微信小程序 createIntersectionObserver 监听无效

项目: taro3 vue3 官方文档 版本:3.x Taro.createIntersectionObserver(component, options) 创建并返回一个 IntersectionObserver 对象实例。在自定义组件或包含自定义组件的页面中,应使用 this.createIntersectionObserver([options]) …

FSMC外设—扩展外部SRAM

目录 FSMC—扩展外部SRAM 前言 SRAM SRAM控制原理 SRAM芯片外观 SRAM芯片的内部功能框架 SRAM信号线 SRAM的存储矩阵 地址译码器、列I/O及I/O数据电路 控制电路 SRAM的读写流程 FSMC FSMC简介 FSMC框图剖析 通讯引脚 存储器控制器 时钟控制逻辑 FSMC的地址映…