秋招Java后端开发冲刺——非关系型数据库篇(MongoDB)

MongoDB

本文介绍非关系型数据库MongoDB的基础知识和常见面试题。
在这里插入图片描述

(一)基础知识

1. 介绍:MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
2.特点

特点说明
文档存储使用 BSON(二进制 JSON)格式存储文档,支持嵌套结构和数组。
灵活的模式(Schema-less)支持动态模式设计,文档结构可以不固定,适合快速迭代开发。
高性能通过内存映射文件和高效的索引机制,提供高性能读写操作。
高可用性支持复制集(Replica Set),提供自动故障转移和数据冗余。
横向扩展支持分片(Sharding)功能,通过分布式架构实现数据的水平扩展。
强一致性默认提供强一致性保证,通过复制集配置可以调整一致性级别。
丰富的查询语言提供丰富的查询语言,支持字段、范围、正则表达式查询以及聚合框架。
原子操作支持单文档级别的原子操作,确保数据修改的一致性和完整性。
支持事务4.0 版本开始支持多文档 ACID 事务,增强数据操作的可靠性。
跨平台支持多种操作系统,包括 Windows、Linux 和 macOS。
易于集成提供多种官方驱动程序,支持多种编程语言,如 JavaScript、Python、Java、C# 等。
强大的社区支持拥有活跃的社区和丰富的文档资料,便于开发者学习和使用。
灵活的索引支持多种类型的索引,如单字段索引、复合索引、地理空间索引和全文索引。
聚合框架提供强大的聚合框架,支持数据处理和分析操作,如过滤、排序、分组、投影等。
文件存储通过 GridFS 实现大文件存储,适用于存储图片、视频等大文件数据。
安全性提供认证和授权机制,支持基于角色的访问控制(RBAC),确保数据安全。
备份与恢复提供多种备份与恢复机制,包括快照备份、导入导出工具和云备份服务。
可视化工具提供官方的 MongoDB Compass 可视化工具,便于管理和分析数据库。

3. 存储结构
(1)文档
文档是 MongoDB 的基本数据单位,使用 BSON 格式存储。每个文档包含键值对,类似于 JSON 对象.
:BSON文档是JSON 文档的二进制表示
(2)集合
集合是一组文档的容器,相当于关系型数据库中的表。集合中的文档可以具有不同的结构。
(3)数据库
数据库是集合的命名空间,相当于关系型数据库中的数据库,每个数据库包含集合、索引和一些元数据。

4. 存储引擎
MangoDB的默认存储引擎是 WiredTiger,支持文档级别的并发控制和压缩。除此之外,MangoDB还支持 MMAPv1(旧版本)和其他第三方存储引擎。
(1)WiredTiger存储引擎
① WiredTiger是MongoDB 3.2 版本开始默认的存储引擎,提供了更高的并发性、压缩和高效的内存使用。
② 特点

  • 文档级锁定:WiredTiger 使用文档级锁定,提高了并发写操作的性能
  • 数据压缩:支持数据和索引压缩,减少磁盘空间的使用
  • 缓存管理:WiredTiger 使用自适应缓存管理,优化内存使用
  • 事务支持:提供多文档 ACID 事务支持,保证数据一致性(与InnoDB事务不相同)
    ③ 配置
storage:
  dbPath: /var/lib/mongodb
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      statisticsLogDelaySecs: 0
      journalCompressor: snappy
    collectionConfig:
      blockCompressor: snappy
    indexConfig:
      prefixCompression: true

(2)MMAPv1 存储引擎
① MMAPv1 是 MongoDB 的原始存储引擎,在 MongoDB 3.0 之前是默认存储引擎,它使用内存映射文件来存储数据。
② 特点

  • 集合级锁定:MMAPv1 使用集合级锁定,适用于读操作较多的场景。
  • 简单实现:设计简单,适合需要快速读取的大量数据
    ③ 配置
storage:
  dbPath: /var/lib/mongodb
  engine: mmapv1
  mmapv1:
    nsSize: 16
    smallFiles: true
    journal:
      enabled: true

(3)In-Memory 存储引擎((在 MongoDB Enterprise 中可用))
① In-Memory 存储引擎将所有数据存储在内存中,适用于需要极高性能和低延迟的场景。
② 特点

  • 高性能:由于数据全部存储在内存中,读写操作速度极快。
  • 无持久化:数据仅在内存中存储,服务器重启后数据会丢失。
    ③ 配置
storage:
  dbPath: /var/lib/mongodb
  engine: inMemory
  inMemory:
    engineConfig:
      inMemorySizeGB: 2

5. 索引

  • 单字段索引
  • 复合索引:遵循最左前缀原则
  • 多键索引:MongoDB 的一个字段可能是数组,在对这种字段创建索引时,就是多键索引;多键索引为数组中每一个值创建索引
  • 哈希索引:按数据的哈希值索引,用在哈希分片集群上
  • 文本索引: 支持对字符串内容的文本搜索查询,一个集合一个
  • TTL索引:参考MongoDB索引
  • 地理位置索引
(二)常见面试题

1. MongoDB 集群
(1)复制集群

  • 是一组维护相同数据集合的 mongodb 进程
  • 组成:包含 1 个主节点(Primary),多个从节点(Secondary)以及零个或 1 个仲裁节点(Arbiter)
  • 主节点负责写和读,从节点负责读,仲裁节点不存储数据,只负责选举时投票
  • 主节点与备节点之间是通过 oplog(操作日志) 来同步数据的( local 库下的一个特殊的 上限集合(Capped Collection) ,用来保存写操作所产生的增量日志)

(2)分片集群

  • 数据被均衡的分布在不同分片中
  • 组成
    ① Config Servers:配置服务器,本质上是一个 MongoDB 的副本集,负责存储集群的各种元数据和配置,如分片地址、Chunks 等
    ② Mongos:路由服务,不存具体数据,从 Config 获取集群配置讲请求转发到特定的分片,并且整合分片结果返回给客户端
    ③ Shard:每个分片是整体数据的一部分子集
  • 分片算法
    ① 基于范围的分片:适合分片键的值不是单调递增或单调递减、分片键的值基数大且重复的频率低、需要范围查询等业务场景。
    ② 基于 Hash 值的分片:适合分片键的值存在单调递增或递减、片键的值基数大且重复的频率低、需要写入的数据随机分发、数据读取随机性较大等业务场景。

2. MongoDB聚合
(1)介绍
① MongoDB 的聚合框架是一个强大的工具,用于处理数据并生成汇总结果。它允许在文档集合上执行复杂的数据处理和分析操作。
聚合管道:是一系列数据处理阶段的组合,每个阶段会对输入文档进行操作,并将结果传递给下一个阶段。

(2)聚合管道常用阶段操作符

  • $match:过滤文档,类似于查询的 find 操作
  • $group:将文档分组,并可对每个分组进行计算
  • $sort:对文档排序
  • $project:重新定义文档的结构,可以添加、删除字段
  • $limit:限制返回的文档数量
  • $skip:跳过指定数量的文档
  • $unwind:将数组类型字段拆分为多个文档

(3)聚合框架的性能优化

  • 使用索引:在 $match 阶段尽量使用索引,以提高过滤数据的速度
  • 限制返回数据量:使用 $limit 和 $skip 控制返回的数据量,避免一次性处理大量数据
  • 简化管道阶段:尽量减少管道阶段的数量,每个阶段只处理必要的数据
  • 适当使用 $project:在数据进入聚合管道时尽早使用 $project 只保留需要的字段,以减少数据传递的开销

3. MongoDB的数据备份和恢复
(1)备份

  • mongodump 命令将 MongoDB 数据导出为 BSON 格式的文件
  • 可以备份整个数据库或指定的集合
  • 示例
mongodump --db <database_name> --out <backup_directory>

(2)恢复

  • mongorestore 命令将 BSON 文件导入到 MongoDB 中,用于恢复数据
  • 示例
mongorestore --db <database_name> <backup_directory>

(3)文件级备份

  • 通过复制 MongoDB 数据存储文件来实现,适用于使用 WiredTiger 存储引擎的 MongoDB 数据库
  • 步骤
    ① 锁定数据库:使用 fsync 锁定数据库以确保数据一致性
    ② 复制数据文件:复制 MongoDB 数据存储文件
    ③ 解锁数据库:解锁数据库

4. MongoDB事务

  • MongoDB 在 4.0 版本开始支持多文档 ACID 事务,使其在操作多个文档和集合时能够保证数据的一致性。
  • 复制集环境:MongoDB 的多文档事务需要在复制集环境中才能使用。
  • 跨分片事务:MongoDB 4.2 及以上版本支持跨分片事务,但需要配置分片集群。

5. 如何处理 MongoDB 中的慢查询
(1)慢查询日志

  • MongoDB 具有内置的慢查询日志功能,可以记录超过指定时间的查询。配置方法如下:
# mongod.conf
operationProfiling:
  slowOpThresholdMs: 100 # 设置慢查询阈值为 100 毫秒
  mode: slowOp
  • db.currentOp() :可以查看当前正在执行的操作,包括运行时间长的查询
  • db.system.profile:数据库的性能分析器,捕获详细的操作信息

(2)慢查询分析
使用 explain() 分析查询计划,帮助分析查询是如何执行的,包括使用的索引、扫描的文档数等

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Rust日常开发三方库精选

日常开发三方库精选 对计算机、编程、架构的理解决定一个程序员的上限&#xff0c;而工具则决定了他的下限&#xff0c;三尺森寒利剑在手&#xff0c;问世间谁敢一战。 本文就分门别类的精心挑选了一些非常适合日常开发使用的三方库&#xff0c;同时针对优缺点、社区活跃等进…

聚类距离度量(保姆级讲解,包学会~)

在机器学习的聚类中&#xff0c;我们通常需要使用距离来进行类的划分&#xff0c;或者比较不同类之间的各种距离&#xff0c;这里我们介绍西瓜书上所提出的一些距离计算方式。 首先介绍一下距离的一些性质&#xff1a; 西瓜书上给出了四条性质&#xff0c;第一个是非负性&#…

《高考择校择专业:权衡与抉择的智慧》

分数限制下&#xff0c;选好专业还是选好学校&#xff1f; 2024 年高考的大幕已然落下&#xff0c;然而对于众多考生而言&#xff0c;新的挑战才刚刚开始。在分数既定的情况下&#xff0c;是优先选择心仪的专业&#xff0c;还是更看重知名度高的学校&#xff1f;这无疑是一个令…

BW:CP里添加信息对象小问题记录

之前做视图直接添加进CP里&#xff0c;以为不能直接往CP里加信息对象&#xff0c;还专门建了一个带信息对象的模型&#xff0c;把信息对象拖到CP里&#xff0c;然后再链接视图的字段 今天发现原来不用这样&#xff0c;直接加就可以&#xff0c;小记一下 如图直接诶创建&#x…

网络安全学习路线图(2024版详解)

近期&#xff0c;大家在网上对于网络安全讨论比较多&#xff0c;想要学习的人也不少&#xff0c;但是需要学习哪些内容&#xff0c;按照什么顺序去学习呢&#xff1f;其实我们已经出国多版本的网络安全学习路线图&#xff0c;一直以来效果也比较不错&#xff0c;本次我们针对市…

uniapp横屏移动端卡片缩进轮播图

uniapp横屏移动端卡片缩进轮播图 效果&#xff1a; 代码&#xff1a; <!-- 简单封装轮播图组件:swiperCard --> <template><swiper class"swiper" circular :indicator-dots"true" :autoplay"true" :interval"10000&quo…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇Kerberos委派安全RBCD资源Operators组成员HTLMRelay结合

红队内网攻防渗透 1. 内网横向移动1.1 横向移动-资源约束委派-利用域用户主机加入1.1.1 利用思路1.1.2 利用条件1.1.3 利用过程1.2 横向移动-资源约束委派-Acount Operators组1.2.1 利用思路:1.2.2 利用条件:1.2.3 利用过程:1.3 横向移动-资源约束委派-CVE结合HTLMRelay1.3.…

Echarts 图表添加点击事件跳转页面,但只有图表部分点击才会跳转页面,坐标轴,区域缩放等点击不跳转。

默认的点击事件是这样的&#xff1a; myChart.on(click, function (param) {console.log(param) }) 这个事件需要点击具体图形才会触发&#xff0c;例如我上面的图&#xff0c;想选择a柱子&#xff0c;就需要明确点击到柱体才行&#xff0c;明显不符合正常的预期&#xff0c;正…

SolidWorks薄壁等厚实体转换成钣金方法

1. 打开SolidWorks软件&#xff0c;新建一个零件。选前视基准面绘制草图&#xff0c;二次创建凸台拉伸特征&#xff0c;如图所示。 2. 创建抽壳特征&#xff0c;厚度“2 mm”&#xff0c;如图所示。 3. 添加切口草图&#xff0c;根据钣金加工工艺在所选面上创建切口草图&#x…

SAP-SD-修改字段描述

在销售订单中,想修改某字段名的描述,以客户组12为例,如下图 现在想把这个字段修改为客户组1,选择-F1 双击“数据元素” 双击 域 转到-翻译

如何提升投资伦敦金的分析能力:回测

对伦敦金行情的分析能力&#xff0c;在我们做伦敦金交易的整个体系中是有很重要的作用的。但要提升对伦敦金行情的分析和把握是不太容易的&#xff0c;那有没有方法可以提升&#xff1f;那答案是有的&#xff0c;下面我们就来讨论一下&#xff0c;这个方法就是回测。 回测就是把…

Hi3861 OpenHarmony嵌入式应用入门--LiteOS semaphore作为锁

CMSIS 2.0 接口中的 Semaphore&#xff08;信号量&#xff09;是用于嵌入式系统中多线程或中断服务例程&#xff08;ISR&#xff09;之间同步和共享资源保护的重要机制。Semaphore 是一种用于控制对多个共享资源访问的同步机制。它可以被看作是一个计数器&#xff0c;用于跟踪可…

准备篇(三)网页相关知识

Java script小脚本 - 爬取 bilibili 表情Java script 小脚本 - 爬取 bilibili 表情 随便点开一个视频,注意这个页面 URL 对应的 HTML 代码中没有表情的代码, 需要先点一下评论区,然后再在这个页面 URL 对应的元素中找到表情所在的源码。(但是我不知道这个带表情 <pic…

STM32之三:中断外部中断

目录 1. 什么是中断 1.1 中断概念 1.2 中断优先级 1.3 中断嵌套 2.STM32中断 2.1 NVIC中断优先级 3 外部中断 3.1 EXTI简介 3.2 EXTI中断/事件线 3.3 EXTI功能框图 3.4 中断和事件的区别&#xff1f; 3.5 什么时候用外部中断&#xff1f; 3.怎么使用STM32中断 3.…

4K高清全屏壁纸免费下载网站

在当今这个视觉效果至上的时代&#xff0c;高清壁纸已经成为许多人装饰桌面的重要选择。特别是4K高清壁纸&#xff0c;以其超高的分辨率和细腻的画面质感&#xff0c;深受广大用户的喜爱。如果你正在寻找一个可靠的4K高清全屏壁纸免费下载网站&#xff0c;不妨来看看以下几个推…

瑞吉外卖问题(待更新...

文章目录 一、session注册时二、用户增加时三、RequestBody3.1 Long问题3.2 RequestBody3.3 UpdataById 四、公共填充字段五、文件上传与下载5.1 拦截器与过滤器 一、session注册时 刚开始使用的是该代码 httpServletRequest.setAttribute("employee",emp.getId());…

探索Linux的奇妙世界:第二关---Linux的基本指令(上篇)

1. xshell与服务器的连接 想必大家在看过上一期视频时已经搭建好了Linux的环境了并且已经下好了终端---xshell了吧?让我来带大家看一看下好了是什么样子的: 第一次登陆会让你连接你的服务器,就是我们买的云服务器,买完之后需要把公网地址ip复制过来进行链接,需要用户名和密码连…

操作系统入门 -- 内存管理

操作系统入门 – 内存管理 1.内存种类 1.1 虚拟内存&#xff08;VIRT&#xff09; 进程需要的虚拟内存大小&#xff0c;包括进程使用的库、代码、数据以及malloc、new分配的堆空间和栈空间等。若进程申请了10MB内存但实际使用了1MB&#xff0c;则物理空间会增长10MB。 1.2 …

红酒达人教你秘技:选酒、存酒,一招一式皆学问

在繁忙的都市生活中&#xff0c;红酒不仅仅是一种饮品&#xff0c;更是一种生活态度&#xff0c;一种品味的象征。然而&#xff0c;面对琳琅满目的红酒品牌与种类&#xff0c;如何选择一瓶心仪的红酒&#xff0c;又如何妥善保存&#xff0c;使其保持很好口感&#xff0c;成为了…

Linux上搭建邮件服务

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 Linux上搭建邮件服务 前言电子邮件的工作原理和基本组成部分1. 电子邮件的工作原理2. 电子邮件的…