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

使用最新的驱动程序

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://xiahunao.cn/news/2774458.html

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

相关文章

蓝桥杯Web应用开发-CSS3 新特性【练习三:文本阴影】

文本阴影 text-shadow 属性 给文本内容添加阴影的效果。 文本阴影的语法格式如下: text-shadow: x-offset y-offset blur color;• x-offset 是沿 x 轴方向的偏移距离,允许负值,必须参数。 • y-offset 是沿 y 轴方向的偏移距离&#xff0c…

OpenMLDB 作为中国唯一的特征平台产品入选 2023 Gartner 研究报告

在国际权威咨询与研究机构 Gartner 发布的重要研究报告《The Logical Feature Store: Data Management for Machine Learning》(《逻辑特征存储:机器学习的数据管理》,下文简称报告)中,OpenMLDB 荣幸作为中国唯一的特征平台代表产…

国产信创领跑者:暴雨信息的创新与实践

随着数字化转型的加速推进,信创产业作为数字经济发展的重要支柱,正日益受到社会各界的广泛关注。在这个大背景下,暴雨信息积极响应国家号召,全面适配国产化,推动信创产业的技术创新和应用拓展,成为了行业的…

Mybatis- plus 基本使用

目录 一. 引入依赖 二.定义Mapper 三.常见注解 3.1TableName 3.2.TableId 3.3TableField 3.4常见配置 一. 引入依赖 由于这个starter包含对mybatis的自动装配&#xff0c;因此完全可以替换掉Mybatis的starter。 <dependency><groupId>com.baomidou</gr…

前端JavaScript篇之数组的遍历方法有哪些?forEach和map方法有什么区别?

目录 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别&#xff1f;forEach()map()filter()for…ofevery() 和 some()find() 和 findIndex()reduce() 和 reduceRight()forEach和map方法有什么区别总结 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别…

U3D记录之FBX纹理丢失问题

今天费老大劲从blender建了个模型&#xff0c;然后导出进去unity 发现贴图丢失 上网查了一下 首先blender导出要改设置 这个path mode要copy 然后unity加载纹理也要改设置 这里这个模型的纹理load要改成external那个模式 然后就有了&#xff0c;另外这个导出还有好多选项可…

Spring如何扫描自定义的注解?

目录 一、Spring框架介绍 二、什么是自定义注解 三、如何扫描自定义的注解 一、Spring框架介绍 Spring框架是一个开源的Java应用程序框架&#xff0c;它提供了一种全面的编程和配置模型&#xff0c;用于构建现代化的企业级应用程序。Spring框架的核心原则是依赖注入&#x…

使用Softing edgeConnector模块将云轻松连接到Siemens PLC

一 工业边缘的连接解决方案 云服务提供商 (CSP) 引入了服务和功能&#xff0c;以简化基于云的工业物联网解决方案的实施。Azure Industrial IoT Platform或AWS IoT SiteWise支持标准协议和接口&#xff0c;例如OPC UA或MQTT。但是&#xff0c;如果您希望在典型的旧改项目中连接…

HttpServletResponse接口用于表示状态代码的字段

1. HttpServletResponse接口用于表示状态代码的字段 您已学习了状态代码以及可用于从servlet向客户机发送状态代码的HttpServletResponse接口的字段。下表列出了HttpServletResponse接口表示状态代码的一些其他字段。 字段状态代码描述SC_HTTP_VERSION_NOT_SUPPORTED505服务器…

Midjourney提示词风格调试测评

在Midjourney中提示词及风格参数的变化无疑会对最终的作品产生影响&#xff0c;那影响具体有多大&#xff1f;今天我我们将通过一个示例进行探究。 示例提示词&#xff1a; 计算机代码海洋中的黄色折纸船&#xff08;图像下方&#xff09;风格参考:金色长发的女人&#xff0c…

222. 完全二叉树的节点个数 - 力扣(LeetCode)

题目描述 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干…

20240207-不要用摸鱼打发时间

20240207-不要用摸鱼打发时间 今天是农历年倒数第三天&#xff0c;很多人都已经回家过年了。我有其他出行计划&#xff0c;所以今年没有回家。其实这一点也有违背自己每年都要回家的原则&#xff0c;但相比往年&#xff0c;真的是更愿意出去不愿意回家了。 想家吗&#xff0c;…

FPGA_简单工程_无源蜂鸣器驱动实验

一 理论 蜂鸣器按其结构可分为电磁式蜂鸣器和压电式蜂鸣器2中类型&#xff0c;按其有无信号源&#xff0c;分为有源蜂鸣器和无源蜂鸣器。 有源蜂鸣器&#xff0c;内部装有集成电路&#xff0c;不需要音频驱动电路&#xff0c;就直接能发出声响&#xff0c;而无源蜂鸣器&#…

算法——前缀和算法

1. 什么是前缀和算法 前缀和算法&#xff08;Prefix Sum&#xff09;是一种用于快速计算数组元素之和的技术。它通过预先计算数组中每个位置前所有元素的累加和&#xff0c;将这些部分和存储在一个新的数组中&#xff0c;从而在需要计算某个区间的和时&#xff0c;可以通过简单…

C++ 内存管理(newdelete)

目录 本节目标 1. C/C内存分布 2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3. C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 4. operator new与operator delete函数 5. new和delete的实现原理 6. 定位new表达式(placem…

设置idea中放缩字体大小

由于idea没默认支持ctrl滚轴对字体调节大小&#xff0c;下面一起设置一下吧&#xff01; 点击 文件 -> 设置 按键映射 -> 编辑器操作 -> 搜索栏输入f 点击减小字体大小 -> 选择增加鼠标快捷键 按着ctrl键&#xff0c;鼠标向下滚动后&#xff0c;点击确定即可 然后…

微软.NET6开发的C#特性——类、结构体和联合体

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;看到不少初学者在学习编程语言的过程中如此的痛苦&#xff0c;我决定做点什么&#xff0c;下面我就重点讲讲微软.NET6开发人员需要知道的C#特性。 C#经历了多年发展&#xff0c; 进行了多次重大创新&#xf…

Hadoop搭建(完全分布式)

节点分布&#xff1a; bigdata-masterbigdata-slave1bigdata-salve2 NameNode NodeManager NodeManager SecondaryNameNodeDataNodeDataNodeResourceManagerNodeManagerDataNode 目录 一、jdk安装&#xff1a; 二、hadoop安装 一、jdk安装&#xff1a; jdk-8u212链接&am…

git 使用 (备查)

git忽略清单 添加忽略清单 SSH免登录 ssh协议可以实现免登录操作&#xff0c;身份验证通过密钥实现。 跨团队写作 解决冲突 拉取 克隆 拉取最新版本 推送 远程仓库别名 直接使用git push推送 多人协作开发 分支命令 合并分支命令在主分支使用&#xff0c;将develop分支合并到…

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

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