【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.mzph.cn/news/3424.shtml

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

相关文章

搭载下一代人工智能技术,微软推出Power Automate流程挖掘产品

在近日的Microsoft Inspire大会中,微软揭晓了他们即将推出的Power Automate流程挖掘产品,并计划在8月1日正式对外开放。 试用地址:https://powerautomate.microsoft.com/zh-cn/#home-signup 这款产品搭载了下一代人工智能技术,有…

基于 Fedora 38 的预期版本 Nobara 38 发布

导读基于 Fedora 38 的预期版本 Nobara 38 终于发布了,它带来了一系列用户友好的修复和功能增强。Nobara 是 Fedora Linux 的修改版本,旨在解决用户面临的常见问题,并提供开箱即用的顺滑的游戏、流媒体和内容创建体验。凭借一系列附加软件包和…

深度学习ai学习方向如何规划,算法竞赛,机器学习,搭建环境等答疑

目录 1了解人工智能的背景知识 2 补充数学或编程知识 3 熟悉机器学习工具库 4 系统的学习人工智能 5 动手去做一些AI应用 1了解人工智能的背景知识 一些虽然存在但是在研究或者工业上不常用的知识,为自己腾出更多的时间来去学习,研究。 人工智能里…

天翎MyApps低代码平台唯品会金牌客服管理系统

项目痛点: 作为一家知名的创新大型电商,唯品会秉承“传承品质生活,提升幸福体验”的企业使命。基于客服铁军锻造项目,实现基于金牌案例的提交、评审、积分,学习功能。 项目中的晋升机制、案例产生学习机制、双激励机制…

linux 基于debian_ubuntu AB系统适配(三)- overlayroot

Overlayroot Overlayroot是一个实用工具,允许您创建一个只读的根文件系统和一个可写的覆盖文件系统。这对于创建一个更安全和稳定的系统很有用,因为对系统所做的任何更改都将存储在覆盖文件系统中,可以很容易地丢弃或重置。 在Debian下,分离的系统在/userdata/rootfs_ove…

手把手教你搭建SpringCloud项目(九)集成OpenFeign服务接口调用

什么是微服务?一看就会系列! 一、手把手教你搭建SpringCloud项目(一)图文详解,傻瓜式操作 二、手把手教你搭建SpringCloud项目(二)生产者与消费者 三、手把手教你搭建SpringCloud项目&#x…

【iOS】ARC实现

ARC由以下工具来实现: clang(LLVM编译器)3.0以上objc4 Objective-C运行时库493.9以上 下面我们,我们将围绕clang汇编输出和objc4库的源代码探究ARC实现 1. __strong修饰符 1.1 赋值给附有__strong修饰符的变量 看下面代码 {…

注释气泡图函数(更新)

之前我们写过一个原创可视化函数Dotplot_anno.R,nature级别图表:一个注释气泡热图函数(适用于单细胞及普通数据)。主要解决的问题是1) 单细胞基因可视化分组注释。2) Bulk RNA差异基因热图、气泡图。3) 富集分析结果气泡图展示。这…

【分布式训练】基于Pytorch的分布式数据并行训练

基于Pytorch的分布式数据并行训练 动机为什么要并行分布数据?现有资料的不足 Outline整体框架图带解释的最小demo示例没有multiprocessing开启multiprocessing 分布式训练启动方式混合精度训练(采用apex) 参考资料 简介: 在PyTorc…

【ROS】ROS1人机界面开发:第一个最简ROS+QtGui程序(按钮启动发布者)

【ROS】郭老二博文之:ROS目录 1、创建工程 1)新建工程:Other Project --> ROS Workspace 2)设置工程名称、路径 3)可以通过点击“Browse”来创建目录 注意:使用自带ros插件的qtcreator-ros,无法创建目录、也不能选择目录,这是个bug,因此需要在终端手动创建目录…

密码学学习笔记(十六 ):Schnorr签名算法

交互式零知识证明 零知识证明(ZKP)就是不会将证据泄露给验证者的知识证明。Schnorr身份认证识别协议是一个交互式ZKP,它满足了完备性、可靠性、零知识性。所谓的交互式ZKP方案通常包含3个步骤(承诺、挑战和证明),在文献中通常被称…

django框架向DRF框架演变过程详解

一、Django框架实现项目查询接口 主要知识点: Django框架视图函数 1、在 Django 项目中创建一个应用(如果还没有创建): python manage.py startapp projects 2、在项目的 models.py 文件中定义项目模型 from django.db impor…

【C++】-stack和queue的具体使用以及模拟实现(dqeue的介绍+容器适配器的介绍)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

Java八股文总结(二)

Java八股文总结(续) 接上篇笔记:Jhttps://blog.csdn.net/weixin_44780078/article/details/130192373 文章目录 Java八股文总结(续)六、MySql 相关1. InnoDB 与 MyISAM 的区别?2. 为什么 InnoDB 存储引擎表…

JavaFx 用户界面控件2——ListView

1.列表显示ListView 下面是一个JavaFX ListView的示例代码和使用方法&#xff1a; public class ListViewExample extends Application {Overridepublic void start(Stage primaryStage) {// 创建一个可观察的列表&#xff0c;用于存储ListView中的数据ObservableList<Str…

【MongoDB】SpringBoot整合MongoDB

【MongoDB】SpringBoot整合MongoDB 文章目录 【MongoDB】SpringBoot整合MongoDB0. 准备工作1. 集合操作1.1 创建集合1.2 删除集合 2. 相关注解3. 文档操作3.1 添加文档3.2 批量添加文档3.3 查询文档3.3.1 查询所有文档3.3.2 根据id查询3.3.3 等值查询3.3.4 范围查询3.3.5 and查…

UML与SYSML的关系

UML与SysML的联系 UML&#xff08;统一建模语言&#xff09;和SysML&#xff08;系统建模语言&#xff09;是两种与建模相关的语言&#xff0c;它们之间存在联系和区别。 SysML的图分类如下图所示。 联系 SysML是基于UML的&#xff0c;它重用了UML 2的子集&#xff0c;并提…

wordpress后台的路径都是空白,进不了后台怎么办?

主题或插件冲突&#xff1a;某些主题或插件可能与其他已安装的主题或插件不兼容&#xff0c;导致登录页面显示为空白。您可以通过禁用所有插件和将主题更改为默认主题来查看是否解决了问题。如果解决了问题&#xff0c;则可以逐个重新启用插件以找出是哪个插件造成冲突。 PHP错…

CGT Asia嘉年华|3D细胞培养与类器官研发峰会10月广州召开

类器官指利用成体干细胞或多能干细胞进行体外三维&#xff08;3D&#xff09;培养而形成的具有一定空间结构的组织类似物&#xff0c;是近10年来干细胞领域发展最快的研究热点之一。2022年&#xff0c;FDA 通过现代化法案 2.0&#xff0c;批准全球首个完全基于“类器官芯片”研…

Win11中的Swapfile.sys

除了 pagefile.sys 和 hiberfil.sys 文件外&#xff0c;在系统根目录会多出一个 swapfile.sys 虚拟内存文件。Windows 10/8 系统为什么会同时使用 SWAP 交换文件和 Page 页面文件呢&#xff1f; 其实 swapfile.sys 文件目前只被用来交换 Universal App (其实就是Metro App)的个…