MongoDB知识框架

简介:MongoDB 是一个基于分布式文件存储的数据库,属于 NoSQL 数据库产品,以下是其知识框架总结:

一、数据模型

  • 文档:MongoDB 中的数据以 BSON(二进制形式的 JSON)格式存储在集合中,文档类似于关系型数据库中的行,但结构更灵活。
  • 集合:是文档的容器,类似于关系型数据库中的表,但集合中的文档不需要有相同的字段结构。
  • 数据库:多个集合组成一个数据库,一个 MongoDB 实例可以包含多个数据库。

二、数据库操作

  • 创建数据库:使用 use 命令,若数据库不存在则会在插入数据时自动创建。
  • 查看数据库:使用 show dbs 命令列出所有数据库。
  • 删除数据库:使用 db.dropDatabase() 方法删除当前数据库。

三、集合操作

  • 创建集合:使用 db.createCollection('集合名') 创建集合。
  • 查看集合:使用 show collections 命令查看当前数据库中的所有集合。
  • 删除集合:使用 db.集合名.drop() 方法删除指定集合。

四、文档操作

  • 插入文档:使用 db.集合名.insertOne({字段:值}) 插入单个文档,db.集合名.insertMany([{文档1},{文档2}]) 插入多个文档。
  • 查询文档:使用 db.集合名.find({查询条件}) 查询文档,支持多种查询操作符,如 $eq(等于)、$gt(大于)、$in(包含)等。
  • 更新文档:使用 db.集合名.updateOne({查询条件}, {$set:{字段:新值}}) 更新单个文档,db.集合名.updateMany() 更新多个文档。
  • 删除文档:使用 db.集合名.deleteOne({查询条件}) 删除单个文档,db.集合名.deleteMany({查询条件}) 删除多个文档。

五、索引

  • 创建索引:使用 db.集合名.createIndex({字段:1}) 创建升序索引,{字段:-1} 创建降序索引,还支持复合索引、文本索引等。
  • 查看索引:使用 db.集合名.getIndexes() 查看集合的索引信息。
  • 删除索引:使用 db.集合名.dropIndex({索引名:1}) 删除指定索引,db.集合名.dropIndexes() 删除所有索引。

六、聚合操作

  • 聚合管道:使用 db.集合名.aggregate([{阶段1},{阶段2}]) 进行聚合操作,常见的聚合阶段有 $match(筛选)、$group(分组)、$project(投影)等。

七、副本集

  • 概念:是一组 MongoDB 实例,其中一个为主节点,其余为从节点,用于数据冗余和高可用性。
  • 配置:需要在每个节点的配置文件中设置相关参数,并使用 rs.initiate() 初始化副本集。

八、分片集群

  • 概念:将数据分散存储在多个服务器上,以提高存储和查询性能。
  • 组件:包括分片服务器(Shard)、配置服务器(Config Server)和路由服务器(Mongos)。

九、性能优化

1、索引优化
  • 合理创建索引:根据查询条件创建复合索引、唯一索引等,避免全表扫描。
  • 避免冗余索引:定期使用 db.collection.getIndexes() 检查并删除无用索引。
  • 索引覆盖查询:确保查询的字段都在索引中,减少文档扫描。
2、查询优化

  • 避免大查询:使用分页(limit 和 skip)处理大量数据,避免一次性返回过多结果。
  • 优化聚合管道:在管道开头使用 $match 尽早过滤数据,减少后续阶段的处理量。
3、内存管理

  • WiredTiger 存储引擎:调整 wiredTigerCacheSizeGB 参数,通常设置为系统内存的 50%。
  • 监控内存使用:通过 db.serverStatus().wiredTiger.cache 查看缓存命中率。
4、分片与副本集
  • 分片策略:选择合适的分片键(如哈希分片、范围分片),避免数据倾斜。
  • 读写分离:在副本集从节点上处理读请求,减轻主节点压力。
5、硬件与存储

  • 使用 SSD:提升 I/O 性能,尤其是写入密集型工作负载。
  • 禁用交换空间:避免内存交换导致的性能骤降。

十、安全配置

1、认证与授权

  • 启用身份验证:在配置文件中设置 security.authorization: "enabled",创建管理员用户。
  • 基于角色的访问控制(RBAC):为不同用户分配不同角色(如 readWritedbAdmin),使用 db.createUser() 创建用户。
2、网络安全

  • 绑定 IP 地址:在配置文件中设置 net.bindIp: 127.0.0.1 或指定允许访问的 IP。
  • 使用防火墙:限制 MongoDB 端口(默认 27017)的访问,仅允许授权 IP 连接。
  • 启用 TLS/SSL:配置证书实现加密通信,设置 net.ssl.mode: requireSSL
3、数据加密

  • 静态数据加密:使用 MongoDB Enterprise 版本的加密功能或操作系统级加密(如 LUKS)。
  • 传输加密:通过 SSL/TLS 加密客户端与服务器之间的通信。
4、审计与监控

  • 启用审计日志:配置 auditLog 参数记录关键操作(如用户认证、敏感命令)。
  • 定期安全审计:检查用户权限、网络配置和日志,识别潜在风险。
5、版本更新与漏洞修复
  • 及时更新 MongoDB:修复已知安全漏洞,建议使用 LTS 版本。
6、敏感操作限制

  • 禁用危险命令:如 $where 操作符,防止 JavaScript 注入攻击。
  • 限制 MongoDB 进程权限:运行 MongoDB 服务的用户应仅拥有必要的系统权限

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

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

相关文章

WEBSTORM前端 —— 第2章:CSS —— 第8节:网页制作2(小兔鲜儿)

目录 1.项目目录 2.SEO 三大标签 3.Favicon 图标 4.版心 5.快捷导航(shortcut) 6.头部(header) 7.底部(footer) 8.banner 9.banner – 圆点 10.新鲜好物(goods) 11.热门品牌(brand) 12.生鲜(fresh) 13.最新专题(topic) 1.项目目录 【xtx-pc】 ima…

1、RocketMQ 核心架构拆解

1. 为什么要使用消息队列? 消息队列(MQ)是分布式系统中不可或缺的中间件,主要解决系统间的解耦、异步和削峰填谷问题。 解耦:生产者和消费者通过消息队列通信,彼此无需直接依赖,极大提升系统灵…

[Linux网络_71] NAT技术 | 正反代理 | 网络协议总结 | 五种IO模型

目录 1.NAT技术 NAPT 2.NAT和代理服务器 3.网线通信各层协议总结 补充说明 4.五种 IO 模型 1.什么是IO?什么是高效的IO? 2.有那些IO的方式?这么多的方式,有那些是高效的? 异步 IO 🎣 关键缺陷类比…

Unity基础学习(八)时间相关内容Time

众所周知,每一个游戏都会有自己的时间。这个时间可以是内部,从游戏开始的时间,也可以是外部真实的物理时间,时间相关内容 主要用于游戏中 参与位移计时 时间暂停等。那么我们今天就来看看Unity中和时间相关的内容。 Unity时间功能…

Java游戏服务器开发流水账(1)游戏服务器的架构浅析

新项目立项停滞,头大。近期读老项目代码看到Java,笔记记录一下。 为什么要做服务器的架构 游戏服务器架构设计具有多方面的重要意义,它直接关系到游戏的性能、可扩展性、稳定性以及用户体验等关键因素 确保游戏的流畅运行 优化数据处理&a…

计算机视觉与深度学习 | 基于Transformer的低照度图像增强技术

基于Transformer的低照度图像增强技术通过结合Transformer的全局建模能力和传统图像增强理论(如Retinex),在保留颜色信息、抑制噪声和平衡亮度方面展现出显著优势。以下是其核心原理、关键公式及典型代码实现: 一、原理分析 1. 全局依赖建模与局部特征融合 Transformer的核…

Linux 文件目录管理常用命令

pwd 显示当前绝对路径 cd 切换目录 指令备注cd -回退cd …返回上一层cd ~切换到用户主目录 ls 列出目录的内容 指令备注ls -a显示当前目录中的所有文件和目录,包括隐藏文件ls -l以长格式显示当前目录中的文件和目录ls -hl以人类可读的方式显示当前目录中的文…

【Linux 系统调试】性能分析工具perf使用与调试方法

目录 一、perf基本概念 1‌. 事件类型‌ 2‌. 低开销高精度 3‌. 工具定位‌ 二、安装与基础配置 1. 安装方法 2. 启用符号调试 三、perf工作原理 1. 数据采集机制 2. 硬件事件转化流程 四、perf应用场景 1. 系统瓶颈定位 2. 锁竞争优化 3. 缓存优化 五、perf高级…

嵌入式中屏幕的通信方式

LCD屏通信方式详解 LCD屏(液晶显示屏)的通信方式直接影响其数据传输效率、显示刷新速度及硬件设计复杂度。根据应用场景和需求,LCD屏的通信方式主要分为以下三类,每种方式在协议类型、数据速率、硬件成本及适用场景上存在显著差异…

【el-admin】el-admin关联数据字典

数据字典使用 一、新增数据字典1、新增【图书状态】和【图书类型】数据字典2、编辑字典值 二、代码生成配置1、表单设置2、关联字典3、验证关联数据字典 三、查询操作1、模糊查询2、按类别查询(下拉框) 四、数据校验 一、新增数据字典 1、新增【图书状态…

【Spring】Spring MVC笔记

文章目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求控制器5、创建springMVC…

如何在大型项目中解决 VsCode 语言服务器崩溃的问题

在大型C/C项目中,VS Code的语言服务器(如C/C扩展)可能因内存不足或配置不当频繁崩溃。本文结合系统资源分析与实战技巧,提供一套完整的解决方案。 一、问题根源诊断 1.1 内存瓶颈分析 通过top命令查看系统资源使用情况&#xff…

LeetCode百题刷002摩尔投票法

遇到的问题都有解决的方案,希望我的博客可以为你提供一些帮助 图片源自leetcode 题目:169. 多数元素 - 力扣(LeetCode) 一、排序法 题目要求需要找到多数值(元素个数>n/2)并返回这个值。一般会想到先…

Android Studio Gradle 中 只显示 Tasks 中没有 build 选项解决办法

一、问题描述 想把项目中某一个模块的代码单独打包成 aar ,之前是点击 AndroidStudio 右侧的 Gradle 选项,然后再点击需要打包的模块找到 build 进行打包,但是却发现没有 build 选项。 二、解决办法 1、设置中勾选 Configure all Gradle tasks… 选项 …

深入浅出之STL源码分析2_stl与标准库,编译器的关系

引言 在第一篇博客中,深入浅出之STL源码分析1_vector基本操作-CSDN博客 我们将引出下面的几个问题 1.刚才我提到了我的编译器版本是g 11.4.0,而我们要讲解的是STL(标准模板库),那么二者之间的关系是什么?…

(十二)深入了解AVFoundation-采集:人脸识别与元数据处理

(一)深入了解AVFoundation:框架概述与核心模块解析-CSDN博客 (二) 深入了解AVFoundation - 播放:AVFoundation 播放基础入门-CSDN博客 (三)深入了解AVFoundation-播放&#xff1…

Kafka 与 RabbitMQ、RocketMQ 有何不同?

一、不同的诞生背景,塑造了不同的“性格” 名称 背景与目标 产品定位 Kafka 为了解决 LinkedIn 的日志收集瓶颈,强调吞吐与持久化 更像一个“可持久化的分布式日志系统” RabbitMQ 出自金融通信协议 AMQP 的实现,强调协议标准与广泛适…

配置 Web 服务器练习

一、要求 1.通过https://ip 可以访问到网站首页 2.通过 https://ip/private/ 实现用户访问控制,仅允许已经添加的 tom,jerry 能够访问到 private 子路径的界面 3.通过 https://ip/vrit/ 实现能够访问到将系统 /nginx/virt 目录下的网页文件&#xff0…

MySQL索引详解(下)(SQL性能分析,索引使用)

索引是MySQL性能优化的核心,但如何精准分析查询瓶颈、合理设计索引,是开发者必须掌握的技能。本文结合实战案例,系统讲解SQL性能分析工具链与索引使用技巧,帮助读者构建高性能数据库系统。 一、SQL性能分析:从宏观到微…

招行数字金融挑战赛数据赛道赛题一

赛题描述:根据提供的用户行为数据,选手需要分析用户行为特征与广告内容的匹配关系,准确预测用户对测试集广告的点击情况,通过AUC计算得分。 得分0.6120,排名60。 尝试了很多模型都没有能够提升效果,好奇大…