MongoDB 8.0新功能出众,实力超越商业数据库

3周前发布 gsjqwyl
19 0 0

MongoDB 8.0新功能大放异彩,实力超越商业数据库

引言

MongoDB 8.0已经面市有一段时间啦,和之前的版本相比,它的新功能主要聚焦在性能提升和可维护性优化上,算得上是当下性能表现极佳的一个版本哟。

具体来讲呢,按照官方的说法,经过通用数据库基准测试工具YCSB(通用数据库基准测试工具)验证,MongoDB 8.0展现出了明显的性能进步。跟7.0版本比起来,写入密集型场景(YCSB批量写入测试)速度最高能提升54%呢。在读取性能方面,纯读场景(100%读取)提升了27%,混合读写场景(95%读 + 5%写)提升了25%。在其他场景测试中,Linkbench性能提升了18%,时序数据场景(TSBS)更是实现了60%的加速呢。

相关图片

降级限流新功能

MongoDB 8.0有一个挺厉害的功能,就是提供了setQuerySettings新命令。setQuerySettings命令可以对不同的查询模式进行一些定制,其中有一个功能是“拒绝查询”。这个功能的应用场景是咱们的数据库有时候会碰到失控的慢查询或者异常线程。打个比方,运行的时候发现一条没命中索引的查询语句,消耗了好多资源,那作为数据库管理员得怎么做呢?第一反应肯定是要杀掉造成问题的查询语句来缓解情况,但这还不够,因为会不断有新的同样的查询语句涌进来,得等到应用方重新修改查询语句并上线才能停止这个查询,或者创建合适的索引来解决问题。显然,前者依赖应用方重新上线新查询语句,不是短时间就能完成的事儿。

而且在前者(改语句)没有彻底解决问题的情况下,大量资源消耗在慢查询上又会让后者(加索引)很难完成,并且在整个解决过程中系统的效率会变低,因为建索引本身也是个消耗很大的任务,就算用background:true在后台运行也是这样。当然也有一些简单粗暴的方案,比如禁用登录用户、修改表名、修改数据库实例的最大连接数、杀语句等等。

相关图片

这些方案大部分都不完美,或者说不够理想。基于这种情况,MongoDB 8.0提供了一个能迅速拒绝某种查询模式的功能来暂时规避这种问题,所有符合查询模式或者queryHash的查询都会被直接拒绝,以此马上缓解线上问题。

这个功能是通过setQuerySettings的reject来实现的。有一点需要注意的情况是,这个配置只对新查询有效。如果一个慢查询已经在执行中,不会马上被杀掉,你还是得等它执行完,或者人工杀掉语句。

通过queryShapeHash实现查询语句拦截配置,能够实现零代码改造的异常查询语句拦截哦。

db.adminCommand({
  setQuerySetting: 'xxxxxx',
  Settings: { Reject: true }
})

通过这个功能,就能够很方便地实现数据库的降级限流,确实挺方便的。目前来看,就算是商业数据库也很少有这种功能呢。

总结

MongoDB 8.0版本的核心是加强性能,和7.0版本相比,某些类型的查询和更新性能甚至提升了25%以上。MongoDB 8.0相关的新功能还包括:时间序列增强功能、命令路径优化、使用tcmalloc让内存碎片化大小减少18%、自定义读超时、持久化查询设置、高级分片功能、可查询加密增强功能等等。

相关图片

本文版权归作者所有,未经作者同意不得转载。

© 版权声明

相关文章

暂无评论

暂无评论...