
— 特色专栏 —
MySQL / PostgreSQL / MongoDB
ElasticSearch / Hadoop / Redis
Kubernetes / Docker / DevOps
Nginx / Git / Tools / OpenStack
大家好,我是民工哥!
恕我直言!牛逼哄哄的 MongoDB 你可能只会 30%。

有不少找工作的读者朋们都在简历里写着:精通各类 Nosql 数据库 redis、MongoDB,结果呢,一看就会,一问就废。
俗话说的好,金三银四,虽说现在大环境市场不太好,但是,找工作还是要找工作,都是为了生计,否则,又有谁会没过完元宵就背井离乡呢?
说起找工作,求职应聘面试,少不了要被面试官折腾一遍理论知识,但是又能怎么样呢?想拿人家的钱,就得受人家的管不是。
所以,该准备理论就要准备,该应付面试前笔试的还是要用心对待,虽然大家都对这种走过场的笔试、理论很反感,不过也没有什么好的办法去改变,唯有改变自己,去适应社会环境,你讲可对哦?
好了,我们废话不多唠,直接上干货。
我们工作中,除了要掌握 MySQL、Redis、Postgresql等数据库之外,还需要学习掌握另一款比较常用且重要的数据库,我们常称之为:文档数据 MongoDB。
在正式介绍之前,我们还是先了解一下 Nosql 数据库的介绍。
是一种非关系型数据库服务,它能解决常规数据库的并发能力,比如传统的数据库的IO与性能的瓶颈,同样它是关系型数据库的一个补充,有着比较好的高效率与高性能。专注于key-value查询的redis、memcached、ttserver。

解决以下问题:
更多关于 MongoDB 数据库的学习文章,请参阅:NoSQL 数据库之 MongoDB ,本系列持续更新中。
MongoDB 是一个高性能、开源的NoSQL数据库,它以灵活的文档模型和强大的扩展性而闻名。
MongoDB是一个文档数据库,采用JSON(JavaScript Object Notation)格式或其二进制形式BSON(Binary JSON)存储数据。这种格式支持内嵌的文档对象和数组对象,因此MongoDB可以存储比较复杂的数据类型。

MongoDB无需预定义表结构,能够动态调整数据结构,非常适合处理复杂、多变的数据类型。
MongoDB支持快速读写操作,并且支持水平扩展,适合处理大规模数据集。
通过复制集和分片技术,MongoDB可以实现数据冗余、负载均衡和高可用性。
CRUD操作:MongoDB支持创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,提供了丰富的操作语法。
强大的查询语言:MongoDB的查询语言非常强大,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引,方便查询和更新。
聚合框架:MongoDB的聚合框架支持复杂的数据处理和分析,通过管道操作符(如match、group、$project)可以实现强大的数据处理功能。
索引支持:MongoDB支持多种索引类型,包括单字段索引、复合索引和全文索引等,可以显著提高查询性能。

MongoDB广泛应用于各种需要处理大规模、非结构化数据的场景,如:
社交场景:存储用户信息以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
游戏场景:存储游戏用户信息、用户的装备、积分等,以内嵌文档的形式存储,方便查询和高效率存储和访问。
物流场景:存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
物联网场景:存储所有接入的智能设备信息以及设备汇报的日志信息,并对这些信息进行多维度的分析。
电商场景:存储商品的规格、属性、描述等差异大的信息,以及订单中的商品列表、用户信息、配送信息等复杂内容。
此外,MongoDB还适用于日志记录、视频直播、数据挖掘、机器学习等领域。

与传统的关系型数据库(如MySQL、PostgreSQL)相比,MongoDB在多个方面存在显著区别:
那么,如果你讲完这些基础介绍之后,面试官问:为什么要用MongoDB呢?你就这样说,保证足够吊打他没商量的。
首先,MongoDB 采用基于文档的存储模型,数据以 JSON 或 BSON 格式存储,这为用户提供了极大的灵活性。
其次,MongoDB 设计用于处理大规模数据集,并支持高效的读写操作。支持水平扩展,通过分片技术将数据集分散到多个服务器上,以提高性能和可用性。
MongoDB 支持自动分片,提供复制集功能,可以实现数据冗余和高可用性。 支持自动故障转移,确保服务的连续性。
MongoDB 也易于使用和部署,提供了易于使用的图形化管理工具(如MongoDB Compass)和命令行工具(如mongo shell)。支持多种操作系统和平台,包括Windows、Linux和macOS等。
最后就是,MongoDB 应用场景丰富,免费开源,强大的社区支持。
MongoDB 的安装比较简单,下面是官方的下载地址,以及官方安装文档的地址,方便大家直达。
下载地址:https://www.mongodb.com/try/download/community

目前最新版本是:8.0.5 ,根据自己的实际情况选择安装即可,实在不是很清楚的可以参考我之前的文章:硬卷 NoSQL 数据库系列(二):MongoDB 安装与 CURD 基本操作
下面以在 Linux 系统安装为例。
创建文件/etc/yum.repos.d/mongodb-org-8.0.repo:
[mongodb-org-8.0]
name=MongoDB
Repositorybaseurl=https://repo.mongodb.org/yum/redhat/8Server/mongodb-org/8.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-8.0.asc
yum install -y mongodb-org
[root@~ yum.repos.d]# systemctl start mongod
[root@~ yum.repos.d]# sudo systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2024-07-28 09:59:55 CST; 26s ago
Docs: https://docs.mongodb.org/manual
Process: 8868 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
Process: 8865 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 8863 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 8862 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
Main PID: 8872 (mongod)
CGroup: /system.slice/mongod.service
└─8872 /usr/bin/mongod -f /etc/mongod.conf
[root@~ yum.repos.d]# mongo --host 127.0.0.1:27017
MongoDB shell version v8.0.5
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("cb27e5a9-600f-4f57-9096-c7348a9ae5f9") }
MongoDB server version: 8.0.5
Welcome to the MongoDB shell.
For interactive help, type"help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2024-07-28T09:59:54.521+0800 I STORAGE [initandlisten]
2024-07-28T09:59:54.521+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2024-07-28T09:59:54.521+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten]
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten]
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten]
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten]
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2024-07-28T09:59:55.705+0800 I CONTROL [initandlisten]
> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
> use testdb;switched to db testdb
更多关于 MongoDB 数据库的学习文章,请参阅:NoSQL 数据库之 MongoDB ,本系列持续更新中。
官方文档:https://www.mongodb.com/zh-cn/docs/manual/crud/



MongoDB 中的索引与聚合是提高数据库性能和数据处理能力的关键功能。
索引是特殊的数据结构,它以一种易于遍历的形式存储集合数据集的一小部分。索引存储一个或一组特定字段的值,并按字段的值排序。
索引项的排序支持有效的相等匹配和基于范围的查询操作。使用索引可以极大地提高查询的效率,减少全集合扫描的次数,从而加快数据检索速度。
硬卷 NoSQL 数据库系列(三):MongoDB 索引与聚合
聚合主要用于处理数据(如统计平均值、求和等),并返回计算后的数据结果。它类似于SQL语句中的聚合函数(如SUM()、COUNT()等)。
MongoDB的聚合操作通过聚合管道实现。聚合管道由多个阶段组成,每个阶段对文档进行转换或过滤,并将结果传递给下一个阶段。
聚合实例
假设有一个包含文章信息的集合test,现在需要计算每个作者所写的文章数。可以使用以下聚合管道:
db.test.aggregate([
{$group: {_id:"$by_user", num_tutorial: {$sum:1}}}
])
该管道将文档按by_user字段分组,并计算每个分组中的文档数(即文章数),结果将返回一个包含作者和文章数的数组。
硬卷 NoSQL 数据库系列(四):MongoDB 基本使用(工具、API、Spring 集成)
mongo #登陆命令
mongod #启动命令
mongodump #全备导出,压缩格式
mongorestore #恢复
mongoexport #备份导出,可读的json格式
mongoimport #恢复
mongos #集群分片
mongotop #查看mongo的运行状态
mongostat #查看mongo的运行状态
> for(i=1;i<10000;i++){ db.hash.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()})}
WriteResult({ "nInserted" : 1 })
[mongo@mongodb-1 ~]$ mongotop

[mongo@mongodb-1 ~]$ mongostat
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
*0 *0 *0 *0 0 2|0 0.0% 0.8% 0 995M 60.0M 0|0 1|0 158b 66.2k 5 Feb 13 23:00:39.404
*0 *0 *0 *0 0 2|0 0.0% 0.8% 0 995M 60.0M 0|0 1|0 158b 65.9k 5 Feb 13 23:00:40.404
*0 *0 *0 *0 0 2|0 0.0% 0.8% 0 995M 60.0M 0|0 1|0 215b 66.1k 5 Feb 13 23:00:41.405
*0 *0 *0 *0 0 2|0 0.0% 0.8% 0 995M 60.0M 0|0 1|0 158b 66.0k 5 Feb 13 23:00:42.403

更多关于 MongoDB 数据库的学习文章,请参阅:硬卷 NoSQL 数据库系列(五):MongoDB 常用管理命令与授权认证
MongoDB 的存储引擎是数据库的核心组件,负责管理数据在内存和磁盘中的存储方式。MongoDB采用插件式的存储引擎架构,支持不同类型的存储引擎,以适应不同场景的需求。以下是对MongoDB存储引擎的详细介绍:
MongoDB的插件式存储引擎架构实现了Server层和存储引擎层的解耦,使得MongoDB可以支持多种存储引擎。这种架构类似于MySQL,MySQL既支持B-Tree结构的InnoDB存储引擎,也支持LSM结构的RocksDB存储引擎。
默认引擎:自MongoDB 3.2版本开始,WiredTiger成为默认的存储引擎,非常适合大多数工作负载,建议用于新部署。
存储结构:WiredTiger主要使用B+树作为其存储结构,但也支持LSM(Log Structured Merge)树。使用B+树时,WiredTiger以page为基本单位往磁盘读写数据,包括根节点(root page)、内部节点(internal page)和叶子节点(leaf page)。
硬卷 NoSQL 数据库系列(六):MongoDB 存储引擎 WiredTiger 技术详解
在创建数据库或集合时,可以指定存储引擎。选择存储引擎时,需要根据具体的应用场景和需求进行权衡。例如,对于需要高并发、数据压缩和事务支持的应用,WiredTiger是一个很好的选择。而对于需要更可预测的数据延迟的应用,可以考虑使用In-Memory存储引擎(尽管存在数据丢失的风险)。
MongoDB 复制集技术是一种用于实现数据冗余、提高数据可用性和确保数据安全性的重要机制。
MongoDB 复制集由一组Mongod实例(进程)组成,包含一个主节点(Primary)和多个从节点(Secondary)。客户端的所有数据都写入主节点,从节点从主节点同步写入的数据,以保持复制集内所有成员存储相同的数据集。
硬卷 NoSQL 数据库系列(七):MongoDB 复制集技术原理详解
主节点负责处理客户端的请求,包括数据的读写操作。从节点负责复制主节点上的数据,确保数据的冗余和一致性。当主节点出现故障时,从节点可以参与选举成为新的主节点。
复制集通过replSetInitiate命令(或mongo shell的rs.initiate())进行初始化。初始化后,各个成员间开始发送心跳消息,并发起主节点选举操作。获得“大多数”(N/2 + 1)成员投票支持的节点会成为主节点,其余节点成为从节点。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
MongoDB 复制集技术是一种强大的数据冗余和可用性保障机制。通过合理配置和管理复制集,可以显著提高系统的可靠性和性能。
MongoDB 集群是一种用于提高数据库可用性、可靠性和性能的架构。
MongoDB 集群主要有三种模式:主从模式(Master-Slave)、副本集模式(Replica Set)和分片模式(Sharding)。
主从模式(Master-Slave)
副本集模式(Replica Set)
分片模式(Sharding)
硬卷 NoSQL 数据库系列(八):MongoDB 集群部署与配置实践
采用嵌入式文档来表示关联数据,减少集合间的连接操作。选择合适的数据类型,避免存储过多的冗余数据和使用过大的数据类型。
为经常被查询的字段创建索引,大幅提升查询性能。在分片集群中,选择合适的分片键是关键。分片键应该具有高基数,避免热点数据集中在一个分片上导致负载不均衡。
适时增加分片节点以平衡负载和提高吞吐量。在mongos节点上配置适当大小的缓存以提高查询的响应速度。
MongoDB 分片是一种将数据分布或分割到多台机器上的方法,主要用于处理大型现代工作负载和实现水平扩展。
MongoDB 分片是一种强大的数据分布方法,能够支持大型数据集和高吞吐量操作。通过合理的分片策略和实施步骤,可以显著提高数据库的性能和可扩展性。
通过将数据集分布到多个分片上,可以利用并行性来提高读/写吞吐量。每个分片都能处理一部分负载,从而整体提高集群的处理能力。
同样地,通过增加分片的数量,也可以增加总体的存储容量。这使得MongoDB能够处理几乎无限量的数据。
区域分片使得可以轻松创建支持地理分布式应用的分布式数据库。通过执行强制数据续驻特定区域的策略,可以实现数据本地性,从而优化查询性能。
硬卷 NoSQL 数据库系列(九):MongoDB 分片(sharding)技术
MongoDB分片集群主要由以下组件组成:
MongoDB支持多种分片策略:范围分片(Range Sharding)、散列分片(Hashed Sharding)、区域分片(Zone Sharding)。
只要是数据库,涉及数据,备份与恢复是必修课,没有之一。
MongoDB 的备份与恢复是确保数据安全性和业务连续性的重要环节。MongoDB 的备份与恢复是确保数据安全性和业务连续性的重要环节。
mongodump是MongoDB自带的备份工具,适用于全量备份。它可以通过连接到正在运行的MongoDB实例,为整个服务器、数据库或集合创建备份。通过命令行指定要备份的数据库、集合以及备份文件的保存路径。例如,mongodump --db your_database_name --out /path/to/backup/directory可以备份指定数据库到指定目录。
mongoexport用于导出集合为JSON或CSV格式,适合逻辑备份且便于数据迁移。通过命令行指定要导出的数据库、集合、输出格式以及输出文件路径。例如,mongoexport --db your_database_name --collection your_collection_name --out /path/to/file.json可以将指定集合导出为JSON格式文件。
对于大型数据库,尤其是使用分片集群或高可用配置时,文件系统备份可能是最有效的解决方案。停止MongoDB实例,拷贝MongoDB数据目录(默认路径一般为/var/lib/mongodb),然后重新启动MongoDB实例。
需要注意的是:这种方法会影响数据库的正常运行,因此,我们运维工程师们切记,一定要在非高峰期进行,并确保有足够的备份和恢复策略(出错能及时回滚数据)。
目前,有不少云平台厂商都提供MongoDB的数据备份和恢复解决方案,通常更加自动化和可靠。
硬卷 NoSQL 数据库系列(十):MongoDB 数据库备份与恢复
MongoDB的恢复方法主要取决于备份的类型和方式。
mongorestore是MongoDB自带的恢复工具,用于还原由mongodump创建的二进制备份。通过命令行指定要恢复的数据库、集合以及备份文件的路径。例如,mongorestore --db your_database_name /path/to/backup/directory/your_database_name-YYYYMMDDHHMM/可以恢复整个数据库。
注意事项:在恢复之前,需要确保MongoDB实例已经停止写操作,以防止数据丢失;恢复完成后,需要重新启动MongoDB实例。
如果MongoDB集群使用了复制集,可以在某个成员发生故障时,将其重新加入复制集,使其从其他正常成员同步数据。使用复制集恢复这种方法适用于需要高可用性和数据冗余的场景。
MongoDB 的操作日志(oplog)记录了所有的修改操作。通过回放oplog中的操作,可以将数据恢复到故障之前的状态。使用 oplog 恢复这种方法适用于需要精确到时间点恢复的场景,但需要注意oplog的大小和保留时间。
目前市面上也有很多第三方工具如 MongoDB Repair、MongoDB Rescue、MongoDB Backup Manager 等,这些工具可以通过修复损坏的数据库文件、恢复删除的文件等方式来进行数据恢复。
MongoDB 数据库备份与恢复建议:
制定好备份策略并定时定期进行备份,切记不要忘记定期验证备份文件的完整性与可恢复性,防止发生故障时无法恢复数据。
确保备份文件存储在安全、可靠的位置,并考虑使用加密和压缩技术来保护备份数据的安全性和节省存储空间。
备份和恢复操作可能会影响数据库的性能,因此需要在非高峰期进行,并监控数据库的性能指标。
在恢复数据之前,需要确保备份文件、oplog文件或者其他节点的数据是最新的,并且数据的一致性得到保证。
MongoDB 的状态与性能管理对于确保数据库的高效运行至关重要。
MongoDB 的状态与性能管理涉及多个方面,包括监控工具的选择、监控指标的关注、性能优化技巧的应用、性能监控与分析的实施以及资源管理与调整等。通过综合应用这些方法和技巧,可以确保MongoDB数据库的高效运行和数据的可靠性。
硬卷 NoSQL 数据库系列(十一):MongoDB 状态检测与性能追踪
我们可以使用相关的工具对它进行监控与管理。比如:
mongostat:这是一个命令行工具,用于监控运行中的MongoDB实例的状态。它以固定的时间间隔输出关于数据库操作的统计信息,帮助管理员了解MongoDB服务器的运行状况和性能。常用参数包括指定MongoDB服务器地址、端口、用户名、密码、身份验证数据库以及输出更新的间隔时间等。
mongotop:这个工具可以显示MongoDB的实时资源使用情况,包括每个数据库的CPU和内存使用率等。
db.serverStatus()命令:该命令提供了从MongoDB实例获取的各种运行时统计信息,包括连接数、锁情况、网络使用情况、CRUD操作次数统计、复制集配置信息等。
使用MongoDB Atlas和其他监控工具实时监控数据库的性能指标,并生成报告帮助识别新的性能瓶颈。
客户端管理工具也我们在使用与管理数据库产品过程中必不可少的工具,通过好用、适用的工具能大大提高我们的工作效率。
MongoDB 客户端管理工具能帮助用户以图形界面或命令行方式管理和操作 MongoDB 数据库的重要工具。

MongoDB 客户端管理工具种类繁多,各有特点。用户可以根据自己的需求和偏好选择合适的工具来管理和操作MongoDB数据库。
硬卷 NoSQL 数据库系列(十二):MongoDB 客户端管理工具
下面给大家列举与简单介绍一下目前市场上的 MongoDB 客户端管理工具,仅供大家参考与选型使用,总之,适合自己的才是最好用的工具。
MongoDB Compass 是 MongoDB官方提供的图形界面工具,适用于Linux、Mac或Windows系统。它为用户提供了直观的操作界面,方便用户管理MongoDB实例、查询和分析数据、创建和修改数据库等。
mongoshell 是 MongoDB 自带的交互式JavaScript命令行操作接口,用户可以使用它查询和更新MongoDB的数据,以及执行MongoDB的管理操作。
Robo 3T(原Robomongo)是一个开源的MongoDB管理工具,支持跨平台使用。它提供了图形界面来管理MongoDB,方便用户进行数据库操作和管理。
Studio 3T是一个功能强大的商业MongoDB客户端,适用于Windows、MacOS和Linux系统。它提供了查询构建器、集合和数据库管理、数据导入和导出等功能。
NoSQLBooster for MongoDB 是一个功能丰富的商业MongoDB客户端,也提供了图形界面来管理MongoDB。它支持多种操作系统,包括Windows、MacOS和Linux。NoSQLBooster for MongoDB分为免费版、个人版和商业版,用户可以根据需求选择合适的版本。
Navicat for MongoDB 是商业版的多数据库管理工具,支持多种数据库类型,包括MongoDB。它提供了集合和数据库管理、查询和分析工具等功能。
Mongo Management Studio 是一个用于数据库管理的免费MongoDB GUI工具,它轻巧且界面清晰,易于开发基于MongoDB的项目。易安装,虽然免费版功能有限,但已足够满足一般用户的数据库管理需求。
Nosqlclient 也是一个免费的开源MongoDB管理工具,基于Web的GUI意味着不再需要命令行来管理数据库。
ClusterControl 它具有管理数据库基础结构的GUI的MongoDB工具,支持MongoDB以及其他多种数据库类型(如MySQL、PostgreSQL等)。
日志是数据库管理过程中非常关键步骤。
MongoDB 日志管理涉及日志的配置、查看、检索、管理、归档和备份等多个方面。MongoDB提供了实时日志查看功能,可以通过MongoDB Cloud Manager或Ops Manager等工具来访问。
在 MongoDB 配置文件中(mongod.conf)systemLog 这块就是配置MongoDB 日志的地方,在这可以配置日志输出的目录与级别等。
需要注意的是,数据库日志文件中可能包含敏感信息,如用户密码、数据库连接字符串等。因此,在管理和存储日志文件时,应确保其安全性,防止未经授权的访问和泄露。
过度的日志记录可能会对MongoDB的性能产生影响。因此,在设置日志级别和轮转规则时,应根据实际需求进行权衡,以确保既能满足故障排查和性能优化的需求,又不会对数据库性能造成过大影响。
硬卷 NoSQL 数据库系列(十三):MongoDB 日志分析工具
日志管理是一项重要的数据库管理工作。通过合理的日志配置、查看与检索、管理和注意事项的遵循,可以确保数据库的稳定运行和高效响应,同时满足合规性和安全性要求。
MongoDB 查询聚合性能优化是一个复杂而关键的任务,涉及多个方面的策略和技术,这是个大工程。
MongoDB 查询聚合性能优化涉及索引优化、查询优化、硬件和配置优化、分片技术以及监控和调整等多个方面。通过综合运用这些优化措施,可以显著提升MongoDB的查询聚合性能。
硬卷 NoSQL 数据库系列(十四):MongoDB 查询聚合性能优化
索引优化:通过创建合适的索引,索引覆盖查询定期重建和分析索引等方法来优化
查询优化:使用explain()方法分析查询计划,减少返回的数据量,优化聚合管道,批量操作(批量插入、更新和删除)以减少单独写入的开销。
硬件和配置优化:通过增加内存,使用SSD提高磁盘读写速度,调整WiredTiger缓存大小等方法。
分片技术:采用分片技术将数据分布在多个服务器上。这可以提升系统的横向扩展能力和处理性能。正确选择分片键,确保数据均匀分布且查询效率高。
定期监控MongoDB的性能指标,如CPU使用率、I/O性能、内存使用情况等。预加载索引到内存以便在高峰期提供更好的性能。使用TTL索引自动删除过期文档,从而减少数据库的压力。
MongoDB 数据库设计开发规范涵盖了数据库命名、集合命名、文档设计、索引设计以及其他多个方面,旨在确保数据库的高效性和一致性。
硬卷 NoSQL 数据库系列(十五):MongoDB 数据库设计开发规范
在实际开发中,应严格遵守这些规范,并根据具体业务需求进行适当的调整和优化。
从第一篇文章开始,我们逐步详细介绍了 MogoDB 基础概念、安装和最基本的CURD操作、索引和聚合、工具/Java API/Springbot集成、常用管理命令与认证、WT存储引擎技术、复制集、集群部署与维护、分片技术、数据备份与恢复、状态检测与性能追踪、客户端和日志分析工具、查询聚合优化、设计开发规范等知识。
相信学完整个知识体系的你,目前已经足够强大了,出去面试吊打面试官应该是不在话下了。
👍 如果你喜欢这篇文章,请点赞并分享给你的朋友!