MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
引言
MongoDB 8.0已经推出有一段时间了,相比之前的版本推出的新功能,8.0版本的新功能集中在提升性能和可维护性上面,可以说是目前性能最好的一个版本。
具体来说,按照官方说法通过基准测试工具YCSB(通用数据库基准测试工具)验证,MongoDB 8.0展现出显著的性能提升。 相较于7.0版本,写入密集型场景(YCSB 批量写入测试)速度提升最高达54%。 读取性能方面,纯读场景(100%读取)提升27%,混合读写场景(95%读 + 5%写)提升25%。 其他场景测试中,Linkbench性能提升18%,时序数据场景(TSBS)更实现60%的加速。

降级限流新功能
MongoDB 8.0本人认为比较牛逼的功能是提供了setQuerySettings新命令, setQuerySettings命令可以为不同的查询模式做一些定制,其中一个功能是“拒绝查询 ”,这个功能的场景是我们的数据库有时候会遇到失控的慢查询或异常线程,设想运行过程中发现一个没命中索引的查询语句,消耗了大量资源,作为DBA你要怎么做? 第一想法肯定是要Kill掉造成问题的查询语句来缓解问题,但这并不足够,因为不断会有新的同样的查询语句涌进来,直到应用方重新修改查询语句并上线来停止这个查询,或者创建合适的索引来解决了问题,显然前者依赖应用方重新上线新查询语句,不是短时间能够完成的工作。
而且前者 (改语句) 没有彻底解决问题的情况下,大量资源消耗在慢查询上又会造成后者 (加索引) 难以完成,而且在整个完成过程当中系统的效率会变低,因为建索引本身也是一个消耗极大的任务,即使是使用background:true在后台运行。当然也有一些简单粗暴的方案,比如禁用登录用户、 修改表名、修改数据库实例的最大连接数、杀语句等等。

这些方案大部分都不够完美,或者说不够丝滑,基于这种情况,MongoDB 8.0提供了一个迅速拒绝某种查询模式的功能来暂时规避这种问题,所有符合查询模式或者queryHash的查询都会被直接拒绝,以此立即缓解线上问题。
这个功能通过setQuerySettings的reject实现。一点需要注意的情况是,这个配置只对新查询有效。如果一个慢查询已经在执行中,不会被立即杀掉,你仍然需要等它执行完,或人工kill掉语句。
查询语句拦截配置,通过queryShapeHash实现零代码改造的异常查询语句拦截
db.adminCommand({
setQuerySetting: 'xxxxxx',
Settings: { Reject: true }
})
通过这个功能,就能很方便的实现数据库的降级限流,确实是非常方便。目前来看,即使是商业数据库也鲜有这种功能。
总结
MongoDB 8.0版本的宗旨在加强性能上,相较7.0版本,某些类型的查询和更新性能甚至提供了25%以上。 MongoDB 8.0相关的新功能还包括:时间序列增强功能、命令路径优化、使用tcmalloc内存碎片化大小减少18%、局定义读超时、持久化查询设置、高级分片功能、可查询加密增强功能等等。

本文版权归作者所有,未经作者同意不得转载。
MongoDB 8.0这个新功能碉堡了,比商业数据库还牛的更多相关文章
- 一张图看懂ANSYS17.0 流体 新功能与改进
一张图看懂ANSYS17.0 流体 新功能与改进 提交 我的留言 加载中 已留言 一张图看懂ANSYS17.0 流体 新功能与改进 原创2016-02-03ANSYS模拟在线模拟在线 模拟在线 ...
- Eviews 8.0&9.0界面新功能介绍
Eviews 8.0&9.0界面新功能介绍 本文其中一些是自己的整理,也有一些是经管之家论坛中一位热心.好学坛友的整理,其中只是简单介绍一下这两个新版本的部分特性,分享出来,有兴趣的看客可以一 ...
- Kafka 0.11新功能介绍:空消费组延迟rebalance
Kafka 0.11新功能介绍:空消费组延迟rebalance 在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer inst ...
- Apache Flink 1.9.0版本新功能介绍
摘要:Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能.目前,Apache Flink 1.9 ...
- Django 3.0的新功能
谷歌翻译的,我修正并且添加了一些内容.凑合看吧. MariaDB的支持 Django现在正式支持MariaDB 10.1和更高版本.有关更多详细信息,请参见MariaDB注释. ASGI支持 Djan ...
- Xamarin.Form 5.0: 新功能和控件以及调试改进
上周在.NET Conf 2020,Scott Hunter(.NET),Maddy Leger(微软移动开发工具-Xamarin项目经理)和David Ortinau(首席项目经理,移动开发人员工具 ...
- geotrellis使用(二十)geotrellis1.0版本新功能及变化介绍
目录 前言 变化情况介绍 总结 一.前言 之前版本是0.9或者0.10.1.0.10.2,最近发现更新成为1.0.0-2077839.1.0应该也能称之为正式版了吧.发现其中有很多变化, ...
- Eviews 9.0新版本新功能——预测(Auto-ARIMA预测、VAR预测)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 9.预测功能 新增需要方法的预测功能:Auto ...
- MyReport报表引擎2.1.0.1新功能
MyReport报表引擎(免Flex开发集成版)的使用场合适用于以传统html构建的系统,希望集成MyReport报表引擎的报表预览.打印和报表设计功能,而且不须要进行Flex相关的二次开发的用户.M ...
- 关于mongodb的复合索引新功能
最新在做一个项目,由于查询字段较多,且查询较频繁,所以我做了一个复合索引,将所有需要查询的字段都做到索引里,做了一个名为s_1_m_1_c_1_v_1_year_1_month_1_week_1_da ...
随机推荐
- PM的正交解调法
1.PM的模拟调制过程 PM信号是一种相位调制信号,其携带的信息保存在其信号的相位中,通过改变载波的相位来实现基带数据的传输. 其函数表达式如下: \[s(t) = A*cos(w_c*t + K ...
- JVM简介—3.JVM的执行子系统
大纲 1.Class文件结构 2.Class文件格式概述 3.Class文件格式详解 4.字节码指令 5.类的生命周期和初始化 6.类加载的全过程 7.类加载器 8.双亲委派模型 9.栈桢详解 11. ...
- Qt编写可视化大屏电子看板系统27-模块5负荷分布
一.前言 负荷分布模块包括工序计划负荷.当日负荷.负荷百分比三个子模块,工序计划负荷用表格的形式展示不同工序在不同日期的负荷工作时长,比如组装工序在 2022-02-10 运行了88小时,一般表格显示 ...
- sql建表添加注释的语句
官方自带的,我觉得麻烦,稍微'封装'一下 create proc Proc_AddExplian @table varchar(200), @clolum varchar(200), @text va ...
- C#中使用ping命令测试远程主机网络通信是否正常
说明,使用ping工具 1.可以用来查询域名是否可以访问 2.可以用来查询域名对应的ip地址 如果远程服务器允许ping命令的前提下. 解决思路:主要使用了C#提供的Ping类,效率比较高,相应快 程 ...
- java EE进行Web开发时*.jsp页面的<%@显示“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”错误,webcontent文件夹总是出现红x或者java源码出现The import javax.servlet cannot be resolved 的解决方法
我们在用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServlet was not found on t ...
- 阿里IM技术分享(八):深度解密钉钉即时消息服务DTIM的技术设计
本文引用自InfoQ社区"5亿用户如何高效沟通?钉钉首次对外揭秘即时消息服务DTIM"一文,作者陈万红等.策划褚杏娟,有修订和改动. 一.引言 本文是国内企业IM的事实王者钉钉首次 ...
- 从韩国客机事故看Java异常处理机制:保障程序的“安全着陆”
当地时间12月29日上午9时,韩国济州航空编号7C2216航班坠毁于韩国务安机场,除救出的两人外,预计事故其余人员全部遇难.据了解,失事客机因起落架故障准备进行机腹着陆,在此过程中发生事故,最终与机场 ...
- [megatron代码阅读] 1. 初始化和组网
以pretrain_gpt.py为例, 看megatron的整体逻辑. 本章主要包括megatron初始化相关逻辑, 核心函数为initialize_megatron, setup_model_and ...
- WPF 动态加载嵌入主程序的DLL
WPF 动态加载嵌入主程序的DLL,好处是节省文件数量,坏处是启动影响加载速度. 首先将DLL添加进项目,选择添加现有项,设置生成操作为"嵌入资源". 代码: public App ...