0到1手把手教mongodb优化性能手段

系列文章目录



前言

MongoDB同关系型数据库一样,在数据量小时看不出任何问题,但是当数据的操作变的频繁,如对10万级的数据表连续进行查询操作,MongDB会变的非常缓慢。针对这种情况,我们对MongoDB进行性能优化。

索引的机制是:当你往某各个集合插入多个文档后,每个文档在经过底层的存储引擎持久化后,会有一个位置信息,通过这个位置信息,就能从存储引擎里读出该文档。
比如mmapv1引擎里,位置信息是(文件id + 文件内offset),在wiredtiger存储引擎里,位置信息是wiredtiger在存储文档时生成的一个key,通过这个key能访问到对应的文档。

对于索引的优化:MongoDB支持对DB的请求进行profiling,目前支持3种级别的profiling。
生产环境建议使用1级别的profiling,并根据自身需求配置合理的阈值,用于监测慢请求的情况,及时的做索引优化。


一、mongodb读性能优化

1. 创建索引:索引可以加速查询操作,可以根据查询条件创建单列索引、复合索引、全文索引等。

2. 选择合适的数据类型:选择合适的数据类型可以减少存储空间,提高查询效率。例如,使用整型代替字符串类型。

3. 避免全表扫描:尽量避免全表扫描,可以使用索引或者分片等方式来优化查询。

4. 使用投影操作:投影操作可以减少返回的数据量,提高查询效率。

5. 使用聚合操作:聚合操作可以将多个查询操作合并为一个操作,减少查询次数,提高查询效率。

6. 使用分片:分片可以将数据分散到多个节点上,提高查询效率和可扩展性。

7. 优化查询语句:优化查询语句可以减少查询时间,例如使用合适的查询条件、避免使用正则表达式等。

8. 使用缓存:使用缓存可以减少查询次数,提高查询效率。可以使用Redis等缓存工具来缓存查询结果。

9. 尽量不使用模糊查询等 ,改为精确查询条件

10. 多使用explain进行执行计划的优化

11. 分页查询,使用 limit() 限定返回结果的大小,降低服务器消耗及网络消耗

12. 查看数据库查询日志,来辅助慢查询的分析调优操作

二、mongodb写性能优化

1. 采用Capped Collection,固定大小:Capped Collections必须事先创建,并设置大小

2. 以最小的方式进行存储,比如颜色字符串存储更改为数字存储,应用层进行转换 

3. 一般情况下MongoDB query optimizer都工作良好,单有些情况需要使用强制索引hint

4. 采用Profiling,原因是它使用的是system.profile来记录,而system.profile是一个Capped Collection。Profile记录在级别为1时会记录慢命令,慢命令默认为100ms,其设置方法有两种,第一种是通过添加-showms启动参数配置;第二种是调用db.setProfilingLevel时加上第二个参数。

5. 读写分离,对于大规模数据集,可以使用分片技术来分散数据负载,提高读写性能。

6.索引优化:使用合适的索引可以大大提高查询性能。在设计索引时,需要考虑查询频率、数据量、数据类型等因素

7. 内存优化:使用合适的内存配置和缓存策略可以减少磁盘读写,提高读写性能

8. 硬件优化:使用高性能的硬件设备可以提高数据库的读写性能,如使用SSD硬盘、增加内存等。

9.日志优化:合理配置日志级别和日志输出方式,可以减少日志对性能的影响。

10. 定期维护:定期清理无用数据、压缩数据、重建索引等操作可以保持数据库的良好性能。 

总结

以上总结了数据库mongodb的常用优化方法。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MongoDB性能优化是指通过一系列技术手段来提升MongoDB数据库的读写效率、响应速度和吞吐量。下面是一些常见的MongoDB性能优化方法: 1. 索引优化:使用合适的索引可以加速查询操作。在选择索引字段时,应根据查询的频率和字段的选择性来进行考虑。避免创建过多的索引,因为过多的索引会增加数据写入和更新的开销。 2. 查询优化:使用合适的查询语句和操作符可以减少数据扫描的量。避免使用全表扫描操作,尽量利用索引进行查询。 3. 数据模型优化:合理设计数据模型可以提升数据库性能。将经常一起查询的数据放在同一个集合中,避免频繁的跨集合查询。 4. 分片集群优化:对于大规模数据集,可以使用分片集群来提高性能和可伸缩性。通过合理划分数据和配置分片,可以实现负载均衡和并行查询。 5. 预分配空间:在写入大量数据之前,可以预先为集合或数据库分配足够的存储空间,避免频繁的扩容操作对性能造成影响。 6. 配置参数优化:根据系统硬件和工作负载的特点,调整MongoDB的配置参数,如缓存大小、线程数等,以获得更好的性能表现。 7. 使用复制集和副本集:通过配置复制集和副本集,可以提高数据的可用性和读取性能。 8. 批量操作和异步写入:通过批量操作和异步写入方式可以提高写入性能。例如,使用Bulk Write API进行批量插入、更新和删除操作;启用Write Concern的"unacknowledged"模式,将写入操作异步化。 9. 监控和调优:定期监控数据库性能指标,如QPS、响应时间、磁盘使用率等,及时发现并解决潜在的性能问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c+猿辅导

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值