关于数据库:MongoDB-50-新特性速览

28次阅读

共计 4340 个字符,预计需要花费 11 分钟才能阅读完成。

前言:7 月 13 号, MongoDB 公布了大版本 5.0, 官网 Release Note 在这里:
(http://docs.mongodb.com/manual)

本文由社区成员肖贝贝在 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 打造成一个世界级的实时数据处理平台。咱们提供和大厂媲美的总包,和远超大厂的将来预期!

正文完
 0