【性能最佳实践】跟着我们一起玩转查询模式与性能分析!

使用最新的驱动程序

MongoDB的官方驱动程序是由负责核心数据库开发的同一个专业团队打造的。这些驱动程序的更新通常比数据库本身更频繁,大概每几个月就会发布一次新版本。我们建议您尽可能使用最新版本的驱动程序,并在您使用的编程语言中安装可用的本地扩展。为了确保这一过程能够顺利融入开发周期,您可以建立一个标准化的流程来测试和升级驱动程序。

您可以在MongoDB的官方网站上找到驱动程序的文档和源代码。此外,还可以通过加入MongoDB社区的邮件列表来获取关于更新的最新消息。

避免创建大型无界限的文档

在应用程序设计中,应避免让文档大小无限增长。以电子商务应用为例,由于很难预测到每个产品将获得的顾客评价数量,因此通常只将一部分评价展示给顾客,如最受欢迎或最新的评价。

与其将产品和所有评价建模为一个单独的文档,更佳的做法是将其中一部分关键评价嵌入到产品文档中,以便快速访问。而其他不那么重要的评价则可以存放在独立的文档中,并通过引用或使用$lookup操作与产品文档关联。(有关更多具体的数据建模方法,可以在本系列的第一期文章中查看。)

只更新已更改的字段

相较于先在应用程序中检索整个文档并更新字段后,再将整个文档保存回数据库,更推荐直接对特定字段进行更新操作。这样做可以有效减少网络带宽的占用,并降低数据库的负载。

通过单个操作更新多个数组元素

您可以通过使用数组的完整表达式来执行复杂的数组操作,这包括对嵌套数组中的元素进行匹配和修改。通过在单个更新操作中应用 arrayFilters 选项,您可以精确指定哪些元素应该在数组字段中被修改。

阿里云MongoDB只读节点

如果您的应用程序需要执行复杂或耗时的任务,例如生成报告或进行ETL(提取、转换、加载)操作,那么您可能需要将这些分析型查询与其他业务操作隔离。通过这样的隔离,您可以确保不同类型的查询不会竞争系统资源,并且避免分析型查询导致工作数据集被驱逐出内存。

阿里云MongoDB可以提供具备独立连接地址的只读节点,适合独立系统直连访问,以减轻大量读请求给主从节点造成的压力。

使用解释计划来分析查询

您可以通过MongoDB的 explain( ) 方法测试应用程序中的查询,并显示关于查询解释计划的详细信息,包括查询是如何被解析和执行的。

● 使用了哪些索引

● 查询是否被索引覆盖

● 是否执行了内存排序,这表明索引是有效的

● 扫描的索引条目数量

● 返回的文档数量,以及读取的数量

● 查询解析所需的时间(以毫秒为单位)

● 拒绝的备用查询计划(使用allPlansExecution模式)

如果查询在不到1毫秒内完成,那么在典型的查询优化情况下,解释计划会显示耗时为0毫秒。

阿里云MongoDB慢查询分析

阿里云MongoDB支持查看实例的慢日志信息,帮助您发现、分析、诊断、跟踪慢日志,为您构建索引提供参考依据,从而提升实例资源的利用率。(默认情况下,只有执行时长超过100毫秒的操作会被认为是慢操作,您可以通过operationProfiling.slowOpThresholdMs参数来修改该时间阈值)

您可以进入阿里云MongoDB控制台,在目标实例页面的左侧导航栏,单击 CloudDBA > 慢日志。在慢日志页面可以查看实例的慢日志趋势、节点列表、慢日志统计和慢日志明细。

● 慢日志趋势:默认展示近15分钟的慢日志趋势图,最多支持查看近3小时的慢日志趋势图。

● 节点列表:展示各个节点的慢请求数量。

● 慢日志统计:展示慢日志的统计信息,包括执行总数、平均执行时间(毫秒)、最大执行时间(毫秒)、平均返回行和最大返回行等。

● 慢日志明细:展示慢日志的明细,包括执行完成时间、数据库、请求内容、客户端和执行时间(毫秒)等。

在这里插入图片描述

其他工具和实用程序

● MongoDB数据库分析器可以收集详尽的信息,这些信息涉及到对正在运行的mongod实例的操作和命令。所有分析器收集的数据都会被写入到admin数据库中的system.profile集合,这是一个大小有限的集合。您可以查询这个集合以获得洞察,并且根据 要分析的数据粒度来调整日志级别。

● mtools是一系列脚本工具,旨在帮助用户对MongoDB的日志文件进行解析、筛选和可视化。其中的mloginfo工具可以分析针对各个集合的查询,并对常见的查询模式进行分组,这有助于您识别出那些在资源消耗上最为显著的查询。(您可以在本系列的上一篇文章中了解有关索引的深入探讨)

● 阿里云MongoDB也提供了全面的监控功能,可以对实例各节点资源的运行情况进行监控,您可以点击查阅阿里云MongoDB的监控文档以获取全面的概述。

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

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

相关文章

医学图像安全性概述

参考文献: Insights into security and privacy issues in smart healthcare systems based on medical images 下图左侧是医疗信息共享系统,右侧是计算机辅助诊疗策略: medical image sharing security (MISS)computer-aided diagnostic (CAD)CAD security (CADS)一般在信…

计算机毕业设计 | SSM超市进销存管理系统(附源码)

1,绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约,外国人迈克尔库伦开设了第一家合作商店,为了更好地吸引大量客流量,迈克尔库伦精心设计了低价策略,通过大量进货把商品价格压低,通过商店一次性集…

Fink CDC数据同步(二)MySQL数据同步

1 开启binlog日志 2 数据准备 use bigdata; drop table if exists user;CREATE TABLE user(id INTEGER NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL DEFAULT ,birth VARCHAR(20) NOT NULL DEFAULT ,gender VARCHAR(10) NOT NULL DEFAULT ,PRIMARY KEY(id) ); ALTER TA…

代码随想录算法训练营29期|day43 任务以及具体任务

第九章 动态规划 part05 1049. 最后一块石头的重量 II class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for (int i : stones) {sum i;}int target sum >> 1;//初始化dp数组int[] dp new int[target 1];for (int i 0; i < stones.lengt…

Java 将TXT文本文件转换为PDF文件

与TXT文本文件&#xff0c;PDF文件更加专业也更适合传输&#xff0c;常用于正式报告、简历、合同等场合。项目中如果有使用Java将TXT文本文件转为PDF文件的需求&#xff0c;可以查看本文中介绍的免费实现方法。 免费Java PDF库 本文介绍的方法需要用到Free Spire.PDF for Java…

【力扣】快乐数,哈希集合 + 快慢指针 + 数学

快乐数原题地址 方法一&#xff1a;哈希集合 定义函数 getNext(n) &#xff0c;返回 n 的所有位的平方和。一直执行 ngetNext(n) &#xff0c;最终只有 2 种可能&#xff1a; n 停留在 1 。无限循环且不为 1 。 证明&#xff1a;情况 1 是存在的&#xff0c;如力扣的示例一…

寒假作业-day5

1>现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用直接插入排序实现升序排序 函数4:请使用插入排序实现升序排序 代码&#xff1a; #include<stdio.h&g…

金融行业专题|证券超融合架构转型与场景探索合集(2023版)

更新内容 更新 SmartX 超融合在证券行业的覆盖范围、部署规模与应用场景。新增操作系统信创转型、Nutanix 国产化替代、网络与安全等场景实践。更多超融合金融核心生产业务场景实践&#xff0c;欢迎阅读文末电子书。 在金融行业如火如荼的数字化转型大潮中&#xff0c;传统架…

数据库表操作

建表删表 建表语句 --建表语句 create table Student (ID INTEGER constraint Student_KEY_1 primary key,--设定主键&#xff0c;同时会自动创建唯一索引NAME VARCHAR2(50) NOT NULL , --设定非空SEX CHAR(1) constraint SEX_CH…

ctfshow-命令执行(web118-web122)

web118 是一个窗口 查看源码 发现是system($code) 命令执行 经过测试禁用了很多东西 很多很多 $IFS可以 思路就是使用系统变量 构造我需要的poc 这些都是系统的环境变量 这是答案${PATH:~A}${PWD:~A}$IFS????.??? 解释一下 PATH变量输出结尾一般都是n 因为网站默认根目…

解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题

目录 一 问题描述 二 解决方案 三 方案来源 四 参考资料 & AI工具 一 问题描述 为了方便进行收藏夹同步&#xff0c;开始从Chrome浏览器切换到Edge浏览器。在使用Edge浏览器过程中发现“每次鼠标点击会出现一个黑色边框”&#xff08;效果如下图所示&#xff09;&#…

使用异步命名管道通信的实例

记录一个使用异步命名管道通信的实例。代码参考了 MSDN 的文档&#xff1a;使用完成例程的命名管道服务器 - Win32 apps | Microsoft Learn。 服务端代码 #include <windows.h> #include <stdio.h> #include <tchar.h> #include <strsafe.h>#define…