后端工程师的高阶面经
邓明
前 Shopee 高级工程师,Beego PMC
6888 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
后端工程师的高阶面经
15
15
1.0x
00:00/00:00
登录|注册

42|MongoDB高性能:怎么优化MongoDB的查询性能?

你好,我是大明。今天我们来学习 MongoDB 的另外一个热点面试主题——优化 MongoDB 的查询性能。
就像之前我多次提到的,任何中间件的面试说到底就是以高可用、高性能和高并发为主。高性能和高并发可以说是孪生兄弟,你做到了高性能,基本上就做到了高并发。
在面试中,性能优化一直被看作是一个高级面试点,因为只有对原理了解得很透彻的人,在实践中才能找准性能问题的关键点,从而通过各种优化手段解决性能问题。
在这之前,我们先来看看 MongoDB 的查询过程,这样方便你理解后面的优化手段。

MongoDB 的查询过程

MongoDB 在分片之后肯定会有一些机制来保证查询能够准确找到数据。说到这里,你肯定想到了分库分表的查询过程。在分库分表中,查询的执行过程中最重要的一步,就是计算数据可能在哪个目标表上。如果实在计算不出来,那么只能考虑使用广播。
而 MongoDB 也需要考虑类似的问题。在 MongoDB 里面,有一类实例叫做 mongos,这些实例就是负责路由查询到目标表上,还有合并结果集。
而在分库分表中,计算目标表是分库分表中间件或者分库分表代理完成的。

MongoDB 的 ESR 规则

在 MongoDB 里面设计索引的时候就要考虑所谓的 ESR 规则。ESR 代表的是 E(Equality)、S(Sort)和 R(Range),也就是相等、排序和范围。你在设计索引的时候,按照 ESR 规则来排列你的索引列。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了如何优化 MongoDB 的查询性能,涵盖了查询过程、设计索引时需要考虑的 ESR 规则以及面试准备建议。作者提出了覆盖索引、优化排序、增加 mongos 实例数量、拆分大文档、嵌入文档和操作系统优化等多种性能优化方案,并分享了自身的实践经验。文章还强调了在面试中准备优化方案的重要性,并鼓励读者积极探索更多优化手段。最后,作者提出了两个思考题,引发读者对操作系统优化和 MongoDB 性能优化的深入思考。整体而言,本文为读者提供了丰富的优化思路和方法,对于需要深入了解 MongoDB 查询性能优化的读者具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端工程师的高阶面经》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • peter
    请问:MongoDB的索引,是包含真正的数据吗?还是只包含指向真正数据的指针?

    作者回复: 我的理解是,放了一个指向数据的指针,并咩有存储真实的数据。

    2023-09-27归属地:北京
  • Stars゛
    拆分大文档是不是就跟mysql数据库分表一样了?
    2024-03-12归属地:广东
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部