系列文章目录
前言
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的常用优化方法。