加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 系统 > 正文

MongoDB优化方法是哪几种?

发布时间:2022-04-22 10:56:39 所属栏目:系统 来源:互联网
导读:这篇文章给大家分享的是一些MongoDB优化方法和MongoDB优化需要注意的地方,具有一定的参考价值,感兴趣的朋友可以看看,下面就跟随小编一起来看看吧。 1. 系统参数及mongo参数设置 mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不选定后
       这篇文章给大家分享的是一些MongoDB优化方法和MongoDB优化需要注意的地方,具有一定的参考价值,感兴趣的朋友可以看看,下面就跟随小编一起来看看吧。
 
       1. 系统参数及mongo参数设置
 
       mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不选定后续就无法再更改。directoryperdb主要是将数据库分文件夹存放,方便后续的备份及数据迁移。
 
       storageEngine(存储引擎)默认使用的是MMAPv1,推荐使用3.0新加入的引擎wiredTiger。经实际使用wiredTiger占用的磁盘空间是MMAP的1/5,索引大小是其1/2,查询速度也提高很多,更重要的是该引擎提供了document级别的锁,当集合插入或更新数据时不需要阻塞读操作了。唯一的问题是市面上支持该引擎查询的工具不多,MongoVUE无法查到该引擎存储的集合,NosqlManager-mongo可以查到但需要.net环境支持。个人觉得熟悉下mongo command用mongo shell就足够了,所以还是强烈推荐使用wiredTiger引擎。
 
       2. 无需对集合进行水平切分
 
       由于之前一直使用关系型数据库,关系型数据库当单表数据量超大时经常使用的一直方法是对数据表进行分表。在使用mongo时便很自然的觉得这招仍然有用。由于该系统的分表都是动态生成的,做到后面发现这招对mongo带来的性能提升远远抵不过维护成本的增加。
 
       这么看动态创建索引勉强还是可以解决的,但是最坑的一个地方是sharding完全没办法做了。shard需要指定要shard的集合和分区键,这个就没法提前动态指定了。所以mongo集合不需要做水平切分(至少千万级不需要了,更大直接shard掉),只需要按业务分开就可以了。
 
       3. 使用Capped Collection
 
       有人使用mongo做数据缓存,而且是缓存固定数量的数据,仍然用正常的集合,然后定期清理数据。其实这时用capped collection性能会好很多。
 
       4. 生产环境一定要用副本集
 
       很多人线上环境还是用单机版,虽然部署快但是很多mongo自然提供的功能都没有用到像自动故障转移、读写分离,这些对后续系统扩容及性能优化太重要了。我想会使用mongo的应该是数据量达到一定级别,查询性能会非常重要,所以强烈建议上线时直接使用副本集。
 
       5. 学会使用explain
 
       之前一直习惯用工具来查询,现在发现应该多使用mongo shell命令来查询,并使用explain查看查询计划。另外在寻找最优索引的时候hint命令也是非常有用的。
 
db.info.find({publishDate:{$gte:20160310,$lte:20160320},isRubbish:{$in:[0,1]},
title:{$regex:".*test.*"},$or:[{useId:10},{groupId:20}]}).explain("executionStats");
       6. 写操作频繁无法使用读写分离
 
       由于系统写操作较多,造成各种w级别锁经常出现(这种锁一般是block read的)而且系统对于数据一致性要求不会太多(大多是后台写入,前台读取,因此允许有一定延迟)所以想用副本集来做读写分离。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读