MongoDB 8.0这个新功能碉堡了,比商业数据库还牛

打印 上一主题 下一主题

主题 838|帖子 838|积分 2514

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实现‌零代码改造的异常查询语句拦截‌‌
  1. db.adminCommand({
  2.   setQuerySetting: 'xxxxxx',
  3.   Settings: { Reject: true }
  4. })
复制代码
通过这个功能,就能很方便的实现数据库的降级限流,确实黑白常方便。目前来看,纵然是商业数据库也鲜有这种功能。
总结

MongoDB 8.0版本的宗旨在增强性能上,相较7.0版本,某些类型的查询和更新性能甚至提供了25%以上。 MongoDB 8.0相关的新功能还包罗:时间序列增强功能、命令路径优化、利用tcmalloc内存碎片化巨细减少18%、局定义读超时、持久化查询设置、高级分片功能、可查询加密增强功能等等。
 
 

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

徐锦洪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表