当前位置:网站首页>MongoDB优化的几点原则
MongoDB优化的几点原则
2022-07-07 11:17:00 【cui_yonghua】
基础篇(能解决工作中80%的问题):
进阶篇:
其它:
1.查询优化
确认你的查询是否充分利用到了索引,用explain命令查看一下查询执行的情况,添加必要的索引,避免扫表操作。
2.搞清热数据大小
可能你的数据集非常大,但是这并不那么重要,重要的是你的热数据集有多大,你经常访问的数据有多大(包括经常访问的数据和所有索引数据)。
使用MongoDB,你最好保证你的热数据在你机器的内存大小之下,保证内存能容纳所有热数据。
3.选择正确的文件系统
MongoDB的数据文件是采用的预分配模式,并且在Replication里面,Master和Replica Sets的非Arbiter节点都是会预先创建足够的空文件用以存储操作日志。
这些文件分配操作在一些文件系统上可能会非常慢,导致进程被Block。所以我们应该选择那些空间分配快速的文件系统。这里的结论是尽量不要用ext3,用ext4或者xfs。
4.选择合适的硬盘
这里的选择包括了对磁盘RAID的选择,也包括了磁盘与SSD的对比选择。
5.尽量少用in的方式查询
尤其是在shard上,他会让你的查询去被一个shand上跑一次, 如果逼不得已要用的话再每个shard上建索引。
优化in的方式是把in分解成一个一个的单一查询。速度会提高40-50倍
6.合理设计sharding key
增量sharding-key:适合于可划分范围的字段,比如integer、float、date类型的,查询时比较快
随机sharding-key: 适用于写操作频繁的场景,而这种情况下如果在一个shard上进行会使得这个shard负载比其他高,不够均衡,故而希望能hash查询key,将写分布在多个shard上进行,考虑复合key作为sharding key, 总的原则是查询快,尽量减少跨shard查询,balance均衡次数少。
mongodb默认是单条记录16M,尤其在使用GFS的时候,一定要注意shrading-key的设计。
不合理的sharding-key会出现,多个文档,在一个chunks上,同时,因为GFS中存贮的往往是大文件,导致mongodb在做balance的时候无法通过sharding-key来把这多个文档分开到不同的shard上, 这时候mongodb会不断报错 [conn27669] Uncaught std::exception: St9bad_alloc, terminating。最后导致mongodb倒掉。
解决办法:加大chunks大小(治标),设计合理的sharding-key(治本)。
7.mongodb可以通过profile来监控数据,进行优化。
查看当前是否开启profile功能 用命令db.getProfilingLevel() 返回level等级,值为0|1|2,
分别代表意思:0代表关闭,1代表记录慢命令,2代表全部
开启profile功能命令为 db.setProfilingLevel(level); #level等级,值同上 level为1的时候,慢命令默认值为100ms,更改为db.setProfilingLevel(level,slowms)如db.setProfilingLevel(1,50)这样就更改为50毫秒
通过db.system.profile.find() 查看当前的监控日志。
边栏推荐
- . Net ultimate productivity of efcore sub table sub database fully automated migration codefirst
- 谷歌浏览器如何重置?谷歌浏览器恢复默认设置?
- 《ASP.NET Core 6框架揭秘》样章[200页/5章]
- Practical example of propeller easydl: automatic scratch recognition of industrial parts
- Sed of three swordsmen in text processing
- MongoDB复制(副本集)总结
- Cmu15445 (fall 2019) project 2 - hash table details
- 人均瑞数系列,瑞数 4 代 JS 逆向分析
- 企业级自定义表单引擎解决方案(十二)--体验代码目录结构
- Star Enterprise Purdue technology layoffs: Tencent Sequoia was a shareholder who raised more than 1billion
猜你喜欢
为租客提供帮助
【学习笔记】AGC010
MATLAB中polarscatter函数使用
Sed of three swordsmen in text processing
《开源圆桌派》第十一期“冰与火之歌”——如何平衡开源与安全间的天然矛盾?
JS缓动动画原理教学(超细节)
《ASP.NET Core 6框架揭秘》样章[200页/5章]
红杉中国完成新一期90亿美元基金募集
Isprs2021/ remote sensing image cloud detection: a geographic information driven method and a new large-scale remote sensing cloud / snow detection data set
Analysis of DHCP dynamic host setting protocol
随机推荐
将数学公式在el-table里面展示出来
Leetcode brush question: binary tree 24 (the nearest common ancestor of binary tree)
@What is the difference between resource and @autowired?
test
Blog recommendation | Apache pulsar cross regional replication scheme selection practice
CMU15445 (Fall 2019) 之 Project#2 - Hash Table 详解
Lingyunguang of Dachen and Xiaomi investment is listed: the market value is 15.3 billion, and the machine is implanted into the eyes and brain
Day26 IP query items
谷歌浏览器如何重置?谷歌浏览器恢复默认设置?
测试下摘要
Unity 构建错误:当前上下文中不存在名称“EditorUtility”
JS判断一个对象是否为空
Layer pop-up layer closing problem
Cinnamon Applet 入门
centso7 openssl 报错Verify return code: 20 (unable to get local issuer certificate)
聊聊伪共享
Leetcode skimming: binary tree 21 (verifying binary search tree)
达晨与小米投的凌云光上市:市值153亿 为机器植入眼睛和大脑
[binary tree] delete points to form a forest
The difference between cache and buffer