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

内容

一、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/datajournal:enabled: true
systemLog:destination: filelogAppend: truepath:  /mnt/mongodb/logs/mongod.log# network interfaces
net:port: 27017bindIp: 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.hqwc.cn/news/23216.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

火山引擎徐广治:边缘云,下一代云计算

6月30日,2023稀土开发者大会在北京举办。大会以「代码不止,掘金不停」为主题,与上百位海内外技术专家一起剖析行业最新动态,为一直在路上的技术开发者们,拓宽技术视野,传播前沿的技术理念。火山引擎边缘云资…

给LLM装上知识:从LLM+LangChain的本地知识库问答到LLM与知识图谱的结合

前言 过去半年,随着ChatGPT的火爆,直接带火了整个LLM这个方向,然LLM毕竟更多是基于过去的经验数据预训练而来,没法获取最新的知识,以及各企业私有的知识 为了获取最新的知识,ChatGPT plus版集成了bing搜…

1770_VirtualBox下安装Debian

全部学习汇总: GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 作为我自己的日常使用,Debian基本上没有出现过。最多是让它运行在某个设备上作为一个服务的平台,因为很多东西我懒得去配置。 Debia…

android editText获取不到数据

问题分析:在onActivityCreated一开始就创建了findViewById,这时获取的是默认值,需要在点击按钮时重新加载才能获取到输入数据。 需要在点击按钮时重新加载数据:

氢辉能源|[4GW]质子交换膜产线投产发布会暨[3MW]PEM电解槽正式交付

2023年7月12日下午,氢辉能源(深圳)有限公司(以下简称氢辉能源)质子交换膜产线投产发布会暨12台50标方3MW电解槽交付仪式在深圳市龙岗区国际低碳城成功举办。 此外,氢辉能源与远景能源、润世华集团、宏洲新能…

arcgis实现影像监督分类

1、打开ArcMap,右击空白处打开影像分类工具栏,如下: 2、打开影像,如下: 打开的影像由于未经处理,颜色看起来很昏暗,这时候可以拉伸一下。具体操作,右击图层选择属性,如下&#xff1a…

vue+relation-graph绘制关系图实用组件

先在终端执行命令 vue create relationgraph创建一个vue2的项目 然后在编辑器中打开新创建的项目 在终端中执行命令 npm install relation-graph --save引入依赖 这样 我们relation-graph就进来了 然后 我们在需要使用的组件中编写代码如下 <template><div>&…

使用IDEA工具debug java annotation processors

最近看Spring提供的自动生成spring-configuration-metadata.json文件的组件。组件依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</opti…

WAIC2023| AIGC究竟在向善还是向恶而行?

目录 一、常见图像篡改技术二、传统篡改图像检测方法2.1、基于光源和噪声的拼接图像篡改检测方法2.2、基于马尔科夫特征的检测方法 三、基于深度学习的图像篡改检测方法3.1、基于Fisher编码和SVM模型的方法3.2、 基于局部异常特征检测的Mantra-Net方法3.2、基于HRNet的编码器—…

程序员的自我修养(2)

目标文件的学习 1.什么是目标文件以及格式 目标文件为编译器编译后生成的文件&#xff0c;就是window下的.obj&#xff0c;linux下的.o文件。与可执行文件格式几乎一样&#xff0c;因为只是缺少链接过程。所以可执行文件&#xff0c;动态链接库&#xff0c;静态链接库&#xf…

mac批量提取文件夹的名称,怎么操作?

mac批量提取文件夹的名称&#xff0c;怎么操作&#xff1f;很多小伙伴想知道在mac电脑上可以一键快速批量的将大量文件夹的名提取出来&#xff0c;而不是采用一个一个名称提取的方法&#xff0c;这是一个有利于提高工作效率的办法&#xff0c;这一项技能在网上几乎找不到解决办…

k210学习篇(一)环境搭建

一、为什么选择Canmv开发板? 便宜!便宜!便宜!淘宝200即可买到一个能带摄像头和LCD屏等等的开发板 二、利用Maix Hub在线训练 Maix Hub官网https://maixhub.com/home Maix Hub使用教程:K210学习笔记——MaixHub在线训练模型(新版) 注意: 三、配置开发环境 1.MaixPy IDE…