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

news2024/12/24 22:18:16

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() 分析查询计划,帮助分析查询是如何执行的,包括使用的索引、扫描的文档数等

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

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

相关文章

数次同台,极越与小米的爱恨情仇

在汽车行业&#xff0c;提起小米&#xff0c;或许很多人都会记得在北京车展登台亮相的小米su7。可提到极越&#xff0c;或许更多人会为之一愣——这是个什么汽车品牌&#xff1f; 实际上&#xff0c;在今年四月的北京车展中&#xff0c;它就坐落于小米汽车W2展馆正对面。这也可…

Electron、Win11静默打印与PowerShell:技术融合与应用探索

Electron、Win11静默打印与PowerShell&#xff1a;技术融合与应用探索 在现代软件开发与办公环境中&#xff0c;技术的融合与创新不断推动着工作效率的提升和用户体验的优化。本文将深入探讨Electron框架、Windows 11&#xff08;Win11&#xff09;静默打印技术以及PowerShell…

Win11禁止右键菜单折叠的方法

背景 在使用windows11的时候&#xff0c;会发现默认情况下&#xff0c;右键菜单折叠了。以至于在使用一些软件的右键菜单时总是要点击“显示更多选项”菜单展开所有菜单&#xff0c;然后再点击。而且每次在显示菜单时先是全部展示&#xff0c;再隐藏一下&#xff0c;看着着实难…

小试牛刀-区块链代币锁仓(Web页面)

Welcome to Code Blocks blog 本篇文章主要介绍了 [区跨链代币锁仓(Web页面)] ❤博主广交技术好友&#xff0c;喜欢我的文章的可以关注一下❤ 目录 1.编写目的 2.开发环境 3.实现功能 4.代码实现 4.1 必要文件 4.1.1 ABI Json文件(LockerContractABI.json) 4.2 代码详解…

《新华日报》理论版报刊简介及投稿邮箱

《新华日报》理论版报刊简介及投稿邮箱 《新华日报》是中国共产党在抗日战争时期和解放战争初期创办的大型机关报&#xff0c;1949 年 4 月在南京复刊&#xff0c;1952 年成为中国共产党江苏省委机关报&#xff0c;现为中共江苏省委直属事业单位。 该报纸的理论版&#xff08;…

pycharm无法添加python解释器的解决方法

出现该错误的原因是先前创建过重名的解释器&#xff08;虚拟环境&#xff09;&#xff0c;在pycharm配置中没有完全删除干净。解决方法如下&#xff1a; 首先在文件->设置界面&#xff0c;找到解释器设置。 然后先按图所示点击全部显示虚拟环境&#xff1a; 接着将无法添…

Django开发实战(1)- 认识django

1.django 使用MTV模式&#xff0c;其实与MVC本质一样&#xff1a; model&#xff1a;业务对象和关系映射&#xff08;ORM&#xff09; template&#xff1a;客户端页面展示 view&#xff1a;业务逻辑&#xff0c;根据需求调用 2.开发相关 √ python √ html&…

高压开关触指接触压力测试仪 隔离开关触指压紧力测试仪

产品概述 KDGK-2016隔离开关触指压紧力测试仪&#xff0c;只要将测试钳模拟触头的传感器在每对触指接触位置张开一下&#xff0c;就能显示出触指此时的接触压力并记忆。有效解决了测量触指压力的难题。 KDGK-2016隔离开关触指压紧力测试仪也可用于隔离开关制造厂对触指压力的…

工作坊回顾 | 谢宁老师赋能一汽汽车集团开展《从市场洞察到产品规划及产品线端到端经营管理》专题工作坊

工作坊现场快报 近日&#xff0c;《华为战略管理法&#xff1a;DSTE实战体系》作者、著名战略管理专家谢宁老师赋能一汽汽车集团&#xff0c;开展《从市场洞察到产品规划及产品线端到端经营管理》工作坊。 一汽汽车集团相关产品线团队成员&#xff08;涉及到研发、生产、市场、…

备忘:PythonREPL中py_repl.run方法执行报错和修改方法

PythonREPL是python提供的 “Read–Eval–Print Loop”&#xff08;读取-求值-打印-循环&#xff09;的缩写&#xff0c;它是一种简单的、交互式的编程环境&#xff0c;我们之前在用AI生成代码后执行就使用这个方法&#xff0c;例如 def py_repl_tool(self, realcode: str):py…

DLS MARKETS外汇:美指牛市通道稳固,非农数据和美国大选成关键因素

摘要&#xff1a; 尽管近期美国经济数据表现疲弱&#xff0c;但美元指数&#xff08;美指&#xff09;依旧表现平稳。本周五即将公布的6月非农就业数据&#xff0c;以及即将到来的美国总统大选&#xff0c;将成为影响美元走势的关键因素。在技术面上&#xff0c;美指保持在牛市…

npm 淘宝镜像证书过期,错误信息 Could not retrieve https://npm.taobao.org/mirrors/node/latest

更换 npm 证书 问题描述报错原因更换步骤1 找到 nvm 安装目录2 发现证书过期3 更换新地址4 保存后&#xff0c;重新安装成功 问题描述 在使用 nvm 安装新版本时&#xff0c;未成功&#xff0c;出现报错&#xff1a; Could not retrieve https://npm.taobao.org/mirrors/node/l…

数据存储方案选择:ES、HBase、Redis、MySQL与MongoDB的应用场景分析

一、概述 1.1 背景 在当今数据驱动的时代&#xff0c;选择合适的数据存储技术对于构建高效、可靠的信息系统至关重要。随着数据量的爆炸式增长和处理需求的多样化&#xff0c;市场上涌现出了各种数据存储解决方案&#xff0c;每种技术都有其独特的优势和适用场景。Elasticsear…

计算机网络部分知识点整理

停止等待协议的窗口尺寸为 1。 √以太网标准是IEEE802.3TCP/IP四层&#xff0c;OSI模型有7层&#xff0c;地址解析协议 ARP 在 OSI 参考七层协议属于数据链路层&#xff0c;在TCP/IP 协议属于网络层&#xff0c;ARP作用&#xff1a;将 IP 地址映射到第二层地址&#xff0c;交换…

44.实现管理HOOK点的链表对象

上一个内容&#xff1a;43.实现HOOK接管寄存器数据 以 43.实现HOOK接管寄存器数据 它的代码为基础进行修改 首先创建一个类 这里创建的名为HOOKPOINT.h HOOKPOINT.cpp文件里面的内容 #include "pch.h" #include "HOOKPOINT.h"HOOKPOINT::HOOKPOINT() {…

Echarts-折线图

1.案例1 1.1代码 option {"tooltip": {"trigger": "axis","backgroundColor": "rgba(32, 33, 36,.7)","borderColor": "rgba(32, 33, 36,0.20)","borderWidth": 10,"textStyle"…

【LeetCode刷题】3099.哈沙德数

题目链接 3099. 哈沙德数 - 力扣&#xff08;LeetCode&#xff09; 实现代码 int sumOfTheDigitsOfHarshadNumber(int x) {int sum 0;for(int temp x; temp; temp / 10)sum temp % 10;return x%sum ? -1 : sum; }

LSTM水质预测模型实践

0 引言 随着水质自动站的普及&#xff0c;监测频次越来越高&#xff0c;自动监测越来越准确。 水质站点增多&#xff0c;连续的水质监测数据&#xff0c;给水质预测提供更多的训练基础。 长短时记忆网络(LSTM)适用于多变量、连续、自相关的数据预测。 人工神经网络模型特点为的…

Yolov10训练,转化onnx,推理

yolov10对于大目标的效果好&#xff0c;小目标不好 一、如果你训练过yolov5&#xff0c;yolov8&#xff0c;的话那么你可以直接用之前的环境就行 目录 一、如果你训练过yolov5&#xff0c;yolov8&#xff0c;的话那么你可以直接用之前的环境就行 二、配置好后就可以配置文件…

[Leetcode 136][Easy]-只出现一次的数字

目录 题目描述 具体思路 题目描述 原题链接 具体思路 ①首先看到数组中重复的数字&#xff0c;想到快慢指针&#xff0c;但是数组的元素是乱序的不好求。因此先对数组排序。使用了STL库的sort函数&#xff0c;时间复杂度O(nlogn)不符合题目要求&#xff0c;空间复杂度O(1)。…