Mongodb性能优化方法

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第82篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

Mongodb与其他数据库类似,当面临大量数据查询时,会出现各种各样的性能问题。本文结合Mongodb的官方文档,整理几个优化Mongodb查询的技巧。

为查询添加索引

为常用的查询建立索引。为多字段查询建立复合索引。当Mongodb执行查询语句时,通过索引查询会比全表扫描快很多。通常,索引的结构也会比文档引用小,而且按照顺序存储。

如有集合posts,用来存储博客发帖信息。如果客户端或应用程序经常按照字段author_name查询,那么可以在author_name字段添加索引来对这个查询进行优化。

复制代码
db.posts.createIndex({author_name: 1})

索引也能够提高在指定字段的排序效率。如系统中的一个经常执行的查询需要按照timestamp字段排序,那么可以通过在字段timestamp添加索引来进行优化。

复制代码
db.posts.createIndex({timestamp:1})

添加索引后,类似下面的查询会优化

复制代码
db.posts.find().sort({timestamp: -1})

Mongodb支持索引的正向和逆向读取。单字段索引的读取顺序对性能没有影响。

索引能够提高查询,数据更新和一些聚合操作的效率。

限制返回数据量,减少网络开销

Mongodb的游标按照分组的形式返回查询结果。如果用户清楚的知道要返回的数据量,用户可以通过添加limit()方法,来限制返回数据的数量,减少网络开销。通查用户的查询和排序一起执行。如下面的操作,用户只返回了posts集合中最新的10条数据。

复制代码
db.posts.find().sort({timestamp: -1}).limit(10)

仅返回需要的数据

当用户仅需要文档中的部分字段时,通过限制只返回需要的字段能够带来好的性能。如在posts集合中,用户只需要timestamp, title, author和abstract字段,用户可以这样构建查询语句。

复制代码
db.posts.find({}, {timestamp:1, title:1, author: 1, abstract:1}).sort({timestamp: -1})

使用$hint指定索引查询

大多数情况下,查询优化器能够为指定操作选择合适的索引。但用户可以通过$hint方法,指定Mongodb查询时使用的索引。hint()方法支持性能调试,也能够在查询语句中从多个索引中手动选择一个最优的索引。

使用Mongodb提供的计算操作符,减少操作次数

如使用Mongodb的$inc方法,对字段值增加或减少。这个操作直接发生在Mongodb的进程当中,而不是查询出来,在客户端计算完新的字段,在保存回mongodb。使用这样的操作符,将查询,数据计算和保存的动作合并成一个动作,也减少了不同客户端操作时产生的并发问题。

相关推荐
sun0077001 小时前
mysql索引底层原理
数据库·mysql
workflower4 小时前
MDSE和敏捷开发相互矛盾之处:方法论本质的冲突
数据库·软件工程·敏捷流程·极限编程
Tony小周4 小时前
实现一个点击输入框可以弹出的数字软键盘控件 qt 5.12
开发语言·数据库·qt
lifallen4 小时前
Paimon 原子提交实现
java·大数据·数据结构·数据库·后端·算法
TDengine (老段)5 小时前
TDengine 数据库建模最佳实践
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Elastic 中国社区官方博客5 小时前
Elasticsearch 字符串包含子字符串:高级查询技巧
大数据·数据库·elasticsearch·搜索引擎·全文检索·lucene
Gauss松鼠会6 小时前
GaussDB应用场景全景解析:从金融核心到物联网的分布式数据库实践
数据库·分布式·物联网·金融·database·gaussdb
守城小轩6 小时前
Chromium 136 编译指南 - Android 篇:开发工具安装(三)
android·数据库·redis
尽兴-6 小时前
如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
linux·数据库·windows·sql·macos
小小不董6 小时前
深入理解oracle ADG和RAC
linux·服务器·数据库·oracle·dba