百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

MongoDB 5.0 新特性速览

ccwgpt 2025-02-24 15:24 31 浏览 0 评论

前言:7 月 13 号, MongoDB 发布了大版本 5.0。本文由社区成员肖贝贝在14号发布于知乎上,他选择了一些亮眼的特性介绍给大家。文末我们还给大家介绍了两个MongoDB岗位,以及MongoDB 5.0 新特性在线研讨会入口,欢迎关注!


时序集合: 版本核心功能

在创建集合时, 可以指定此集合为时序集合, 一个创建命令如下:


db.createCollection( 
    "weather24h", 
    { 
       timeseries: { 
          timeField: "timestamp", 
          metaField: "metadata", 
          granularity: "hours" 
       }, 
       expireAfterSeconds: 86400 
    } 
) 
 
timeField 是时间戳, metaField 是标签, granularity 是聚合粒度,
expireAfterSeconds 是过期时间

timeField 是时间参数, 必须为 BSON data。

和其他时序数据库类似, metaField 影响维度基数, 好的 metaField 应该选择低基数的, 有选择性的指标, 高基础必然带来性能的下降。

granularity 是可选的聚合粒度参数, 数据库会将一个时间段的数据聚合存放, 这个参数影响性能, 不影响功能。

expireAfterSeconds 影响数据的过期, 是通过每 60s 一次的检测实现的。

时序集合对于查找连续时间块的指标具有非常好的性能, 同时可以降低磁盘占用, 相比与其他时序数据库, 需要注意的点有:

  1. 时序集合底层存储依然是 WiredTiger, 但是现在创建集合, 已经支持了表级别 storageEngine, 未来不排除会有各种各样的集合级引擎出现;
  2. 没有为时序查询定制新的语法, 各种聚合依然需要通过 aggregate 进行, 或者通过 Materialized Views 创建视图来查看数据;
  3. 索引上, 时序集合已经按照常用的查询模式, 对数据进行了索引, 但是这个索引不会被 list 索引命令列出来, 同时, 如果有自己的针对 metafield 的过滤需求, 可以正常创建二级索引;
  4. 和其他时序引擎一样, 为了保证存储效率, MongoDB 的时序集合不支持更新与手动删除, 另外, 在当前版本里, 时序集合不支持分片

所以, 时序集合是一个在使用上与传统集合几乎无差别, 但是针对时序场景做了特定优化的集合类型, 这是一个非常好的开始, 加上创建集合时, 支持了 stotageEngine 参数, 我们期待在 MongoDB 上, 可以出现集合级别的引擎这种特性, 将各种数据库的优势集中到一起, 不仅仅是文档, 而是 ALL IN ONE DATABASE!


修改了默认的写参数

不是个特别大的特性, 不过到现在网上还天天说 MongoDB 丢数据, 这次新版本把默认的写参数从 1 改成了大多数, 丢数据的 "罪证" 又少了一个, 接下来升级之后, 估计会出现一堆 MongoDB 升级后性能大幅度下降 的黑帖。

需要注意下, 在存在投票节点, 且投票节点的存在会让大多数实际上无法实现时, MongoDB 依然使用 1 作为默认写入参数。

其实, 性能和一致性本来就是一个看场景的东西, 一个好的程序员, 应该能在其中找到适合自己的设置, 而不是把这些东西都丢给数据库, 毕竟, 数据库又不会帮你写业务

动态修改片键

在生产中, 难免会出现片键设计不合理的情况, 之前修改片键基本需要停机进行, 或者通过一些在线迁移工具, 比如国内领先的异构数据同步工具 TAPDATA, 将数据实时从一个集合迁移到另一个集合, 来实现变相的片键修改。

本质上, 是因为修改片键需要挪动大量的存量数据, 这个性能上很难做得很好, 官方一直没提供这个功能, 这个版本提供了 reshardCollection 命令, 可以不停机直接在线修改片键, 很方便。

不过在这里提醒下, 不要对这个功能有太高的性能期待, 可以参考第一个版本的数据均衡, 后面的版本会慢慢改善的。

快照读

在新版本里, snapshot 读参数可以用在普通的 find, aggregate 和 distinct 命令里了, 感觉离传统的范式数据库又近了一步。

当然, distinct 目前不能用在分片集合上, 总的来说, 这些事务性的支持提高, 会让 MongoDB 的应用场景变得更丰富。

需要注意, snapshot 依赖
minSnapshotHistoryWindowInSeconds 这个老长的参数, 如果参数设置不合适, snapshot 读取会报 SnapshotTooOld 错。


isMaster 命令重命名

isMaster 命令被 hello 命令替代掉, 这里在这里说明的原因是, MongoDB 客户端依赖 isMaster 命令来做一些自动发现的事情, 这个修改可能导致对这个命令敏感的场景无法工作。

考虑一个系统架构, 一个三节点副本集, 三节点全部使用内网 IP 进行通信, 这些内网 IP 是外网客户端无法直接访问的, 为了让外网可以访问, 需要通过一个外部可用的网关(VIP OR 域名 或者一些其他的设备), 对副本集的地址做一个映射提供给外网, 但是 MongoDB 客户端为了做高可用, 在副本集方式连接时, 会额外发送 isMaster 命令, 获取集群配置的节点列表做真实的连接, 这样外网网关就被绕过了。

所有的云服务厂商都在这里做了一些自己的源码修改, 来支持这种场景, 这个命令修改之后, 可能需要进行一些适配。

Whatever, 大部分用户是不感知这个修改的。

Change Streams 新增了一个事件

新增了 truncatedArrays 来记录对数组的 truncated 操作, 这里提这个是希望 MongoDB 在 Change Streams 上可以有更细致的支持, 现在业务上对 Change Streams 的应用越来越多, 性能上和功能上的需求越来越强烈, 这次 Change Streams 的更新, 让我们看到官方没有放弃这个特性。

如果 Change Streams 能提供完整的 before, after, 提供一些唯一键信息, 片键信息, 然后性能能做一些根本性提升, 会有更多的适用场景。

MongoDB Shell 项目废弃

新的 MongoDB 命令行客户端 mongosh 成为默认客户端, MongoDB Shell 将会停止支持, 使用的同学需要关注下。

读性能提升

从当前版本开始, 这些操作:

  • find
  • count
  • distinct
  • aggregate
  • mapReduce
  • listCollections
  • listIndexes

不再受一些独占锁的影响, 会提升一些场景下的读性能。


聚合查询功能增加


提供了一些额外的操作符, 比如 setWindowFields 允许在一个窗口进行计算等等。

这里并不是想说的重点, 重点是除了功能之外, 希望 MongoDB 的聚合性能能想办法从根本上提升一下, 否则基于现在的表现, 在聚合上基本是被 某另外一个文档数据库 吊打的节奏, 适用场景非常有限, 这次的修改让我们看到 MongoDB 没有放弃聚合, 泪奔。

期待之后的新版本里对聚合的性能做一些提升。


升级须知

5.0 版本包含一些对旧版本不兼容的特性, 需要通过
featureCompatibilityVersion 来做一些设置。

虽然有一些非常激动人心的特性, 不过当前阶段, 不建议在生产环境对数据库做升级, 按照惯例, 可以等 5.2 发布再升级。


岗位推荐来了!


肖贝贝是MongoDB中文社区创始成员之一,也是一家名叫Tapdata的创业公司的技术负责人。Tapdata由前MongoDB大中华区技术总监唐建法(TJ)创立,并于近期获得了五源资本领投的千万美元融资。以下为Tapdata的MongoDB人才招募启事:

不论是MongoDB数据库研发工程师,MongoDB 高级DBA,还是研发Leader,Java 中间件研发工程师,测试Leader,Oracle 高级DBA,产品经理/总监······我们现在迫切需要更多的工程师来加入我们一起,把Tapdata打造成一个世界级的实时数据处理平台。

我们有一个优秀的创始团队,成员来自MongoDB、百度、腾讯、阿里巴巴、Oracle等明星科技公司,薪资可比大厂,股票期权爆发力必须远超大厂!

以产品为核心的团队文化, 一群热血的小伙伴在为一个心中的目标持续奋斗的过程, 必定会给你带来不一定的人生经历。

下边介绍MongoDB数据库研发工程师,MongoDB 高级DBA两个岗位,感兴趣的朋友请识别二维码投递简历或者勾搭肖贝贝私聊!

MongoDB数据库研发工程师

招聘单位:Tapdata

城市:深圳/北京/上海,远程可商议

投递邮箱:beibei@tapdata.io


职位描述:

Tapdata的实时数据处理以及实时数据中台的存储均需要用到分布式数据库MongoDB。作为国内最专业的MongoDB团队之一,当我们遇到一些特定场景引起性能瓶颈的时候,我们迎难而上,要从底层优化和解决我们遇到的性能问题。我们和官方有良好的合作关系,你有机会直接和官方工程师进行交流并提交PR。


理想的你应该是(无需全部匹配):

1. 3-5年以上C++ 基础软件研发经验

2. 能够阅读并理解大型开源软件(MongoDB)

3. 熟悉常用的数据结构与算法

4. 参与过开源软件研发

5. 熟悉分布式原理、并发编程、IO、操作系统等

6. 良好的编码习惯


MongoDB 高级DBA

招聘单位:Tapdata

城市:深圳/北京/上海,远程可商议

投递邮箱:beibei@tapdata.io


职位描述:

Tapdata 是唯一的一个以MongoDB为主要存储的数据平台产品;

Tapdata创始人是MongoDB技术社区的发起人和广受好评的极客时间MongoDB 高手课的讲师;

Tapdata团队拥有来自前MongoDB原厂工程师及7名认证工程师;

Tapdata团队为国内三大运营商的两家提供MongoDB技术支持;

如果你是走MongoDB路线,在这里你会有最好的成长。你会配合研发团队,对Tapdata产品里的MongoDB的读写性能调优,以及保障Tapdata客户的MongoDB集群的稳定运行。你也可能会进行一些数据库相关的工具的研发。


理想的你:

1. 3-5年MongoDB数据库经验

2. 了解MongoDB底层原理机制,包括分片,复制集,监控指标,备份恢复流程,事务性,Oplog,性能特征等

3. 有大型集群运维经验,具有系统性的数据库性能排查及调优经验

4. 具有丰富的操作系统经验, Docker, Kubernetes

5. 有一定的编程基础


不论是MongoDB数据库研发工程师,MongoDB 高级DBA,还是研发Leader,Java 中间件研发工程师,测试Leader,Oracle 高级DBA,产品经理/总监······我们现在迫切需要更多的工程师来加入我们一起,把Tapdata打造成一个世界级的实时数据处理平台。我们提供和大厂媲美的总包,和远超大厂的未来预期!

相关推荐

自己动手写Android数据库框架_android开发数据库搭建

http://blog.csdn.net/feiduclear_up/article/details/50557590推荐理由关于Android数据库操作,由于每次都要自己写数据库操作,每次还得去...

谷歌开源大模型评测工具LMEval,打通谷歌、OpenAI、Anthropic

智东西编译|金碧辉编辑|程茜智东西5月28日消息,据科技媒体TheDecoder5月26日报道,当天,谷歌正式发布开源大模型评测框架LMEval,支持对GPT-4o、Claude3.7...

工信部:着力推动大模型算法、框架等基础性原创性的技术突破

工信部新闻发言人今日在发布会上表示,下一步,我们将坚持突出重点领域,大力推动制造业数字化转型,推动人工智能创新应用。主要从以下四个方面着力。一是夯实人工智能技术底座。通过科技创新重大项目,着力推动大模...

乒乓反复纠结“框架不稳定”的三个小误区

很多球友由于对框架的认知不清晰,往往会把“框架不稳定”当成一种心理负担,从而影响学球进度,其典型状态就是训练中有模有样,一旦进入实战,就像被捆住了手脚。通过训练和学习,结合“基本功打卡群”球友们交流发...

前AMD、英特尔显卡架构师Raja再战GPU,号称要全面重构堆栈

IT之家8月5日消息,知名GPU架构师拉贾科杜里(RajaKoduri)此前曾先后在AMD和英特尔的显卡部门担任要职。而在今日,由Raja创立的GPU软件与IP初创企...

三种必须掌握的嵌入式开发程序架构

前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。我相...

怪不得别人3秒就知道软考案例怎么做能50+

软考高级统一合格标准必须三科都达到45分,案例分析也一直是考生头疼的一门,但是掌握到得分点,案例能不能50+还不是你们说了算吗?今天就结合架构案例考点,分享实用的备考攻略~一、吃透考点,搭建知识框架从...

UML统一建模常用图有哪些,各自的作用是什么?一篇文章彻底讲透

10万+爆款解析:9大UML图实战案例,小白也能秒懂!为什么需要UML?UML(统一建模语言)是软件开发的“蓝图”,用图形化语言描述系统结构、行为和交互,让复杂需求一目了然。它能:降低沟通成本避...

勒索软件转向云原生架构,直指备份基础设施

勒索软件组织和其他网络犯罪分子正越来越多地将目标对准基于云的备份系统,对久已确立的灾难恢复方法构成了挑战。谷歌安全研究人员在一份关于云安全威胁演变的报告中警告称,随着攻击者不断改进数据窃取、身份泄露和...

ConceptDraw DIAGRAM:释放创意,绘就高效办公新未来

在当今数字化时代,可视化工具已成为提升工作效率和激发创意的关键。ConceptDrawDIAGRAM,作为一款世界顶级的商业绘图软件,凭借其强大的功能和用户友好的界面,正逐渐成为众多专业人士的首选绘...

APP 制作界面设计教程:一步到位_app界面设计模板一套

想让APP界面设计高效落地,无需繁琐流程,掌握“框架搭建—细节填充—体验优化”三步法,即可一步到位完成专业级设计。黄金框架搭建是基础。采用“三三制布局”:将屏幕横向三等分,纵向保留三...

MCP 的工作原理:关键组件_mcp部件

以下是MCP架构的关键组件:MCP主机:像ClaudeDesktop、GitHubCopilot或旅行助手这样的AI智能体,它们希望通过MCP协议访问工具、资源等。MCP主机会...

软件架构_软件架构师工资一般多少

软件架构师自身需要是程序员,并且必须一直坚持做一线程序员。软件架构应该是能力最强的一群程序员,他们通常会在自身承接编程任务的同时,逐渐引导整个团队向一个能够最大化生产力的系统设计方向前进。软件系统的架...

不知不觉将手机字体调大!老花眼是因为“老了吗”?

现在不管是联系、交友,还是购物,都离不开手机。中老年人使用手机的时间也在逐渐加长,刷抖音、看短视频、发朋友圈……看手机的同时,人们也不得不面对“视力危机”——老花眼,习惯眯眼看、凑近看、瞪眼看,不少人...

8000通用汉字学习系列讲座(第046讲)

[表声母字]加(续)[从声汉字]伽茄泇迦枷痂袈笳嘉驾架咖贺瘸(计14字)嘉[正音]标准音读jiā。[辨形]上下结构,十四画。会意形声字,从壴从加,加也表声。注:从壴,字义与鼓乐有关;从加,字义与...

取消回复欢迎 发表评论: