【MongoDB基础原理】Change Streams 生产建议

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: MongoDB从3.6版本开始提供了Change Stream特性,通过该特性,应用程序可以实时的订阅特定集合、库、或整个集群的数据变更事件,相比该特性推出之前通过监听oplog的变化来实现对数据变更的感知,非常的易用,该特性同时支持副本集和集群场景。

如果您在开启Change Streams的情况下删除或重命名集合或数据库,则Change Streams光标在操作日志 (oplog) 中移到该点时将关闭。使用含有 fullDocument : updateLookup 选项的Change Streams光标可能会为查找文档返回 null 值。


尝试对已删除的集合恢复Change Streams将导致错误。在Change Streams捕捉到的最后一次事件与集合删除事件之间,该集合上发生的任何数据变更都将丢失。


Change Streams响应文档必须遵循 16MB 的 BSON 文档大小限制。根据打开Change Streams集合中的文档大小,若生成的通知文档超出 16MB,则无法发送。例如,对配置为返回完整更新文档的Change Streams更新操作,或对文档大小等于或略低于限制的文档进行插入/替换操作。


副本集

对于带有仲裁器成员的副本集,若没有足够的数据承载成员导致大部分操作无法完成,则Change Streams可能会一直处于空闲状态。


例如,一个带有两个数据承载节点和一个仲裁器的 3 成员副本集。如果次要节点由于故障或升级而不可用,则大部分写入操作无法完成。Change Streams将保持打开的状态,但不会发送任何通知。


在这种情况下,只要应用程序接收到的最后一个操作仍然在副本集的 oplog 里,该应用程序就能同步停机期间的所有操作。


如果预估停机时间会较长(比如升级或重大灾难),则需考虑增加操作日志的大小,从而使操作保留的时间比预计的停机时间更长。可以用 rs.printReplicationInfo()来检索 oplog 的大小以及保存的操作的时间范围等关于操作日志状态的信息。


分片集群

Change Streams通过全局逻辑时钟提供整个分片的变更排序。MongoDB 确保变更顺序得以保留,且Change Streams通知能够按接收时的顺序安全地解释。例如,为 3 个分片集群打开Change Streams光标时会依照这 3 个分片上的变更顺序返回变更通知。


为确保变更的整体排序,mongos会针对每个变更通知检查每个分片,确认该分片是否存在最近的变更。如果分片集群有一或多个分片且分片的集合几乎没有活动或处在“冷”状态,则会给Change Streams的响应时间带来负面影响。这是因为 mongos仍必须检查这些冷分片以确保变更整体排序正确。对于分散的分片或大多数操作发生在集群中分片子集的工作负载来说,这种影响可能会更加明显。


如果分片集合中有高水平活动,mongos可能无法跟上所有分片上的变更。此时应考虑为此类集合使用通知筛选。例如,传递配置为仅筛选插入操作的 $match管道。


对于分片集合,利用 multi : true更新操作可能会导致针对该集合打开的Change Streams为孤立文档发送通知。


从未分片的集合被分片那一刻到Change Streams追上第一批迁移的时间,Change Streams通知文档中的 documentKey 只包含文档的 _id,而不包括完整的分片键。

索引和性能

Change Streams无法使用索引。MongoDB 不支持在 oplog 集合上创建索引。 因此,避免打开大量专门的Change Streams,否则会影响服务器性能。

Change Streams优化

从 MongoDB 5.1 开始,Change Streams会经过优化,实现更高效的资源利用率和加速某些聚合管道阶段的执行。

Change Streams和孤立文档

从 MongoDB 5.3 开始,范围迁移期间,不会生成Change Streams事件来更新孤立文档


免费试用阿里云版MongoDB数据库。

立即加入阿里云MongoDB开发者训练营,带你5天快速入门全球最受欢迎的 NoSQL数据库!

扫码加入钉群,与MongoDB专家一对一沟通,了解更多阿里云MongoDB产品与方案,市场活动及线上培训等内容。

钉钉入群二维码原图.jpeg

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
存储 运维 负载均衡
MongoDB详解(二)——MongoDB架构与原理
MongoDB详解(二)——MongoDB架构与原理
45 2
|
4月前
|
NoSQL MongoDB 数据安全/隐私保护
Flink CDC支持MongoDB的CDC(Change Data Capture)连接器
Flink CDC支持MongoDB的CDC(Change Data Capture)连接器
118 4
|
7月前
|
存储 缓存 NoSQL
MongoDB基础及原理介绍
MongoDB基础及原理介绍
313 0
|
8月前
|
存储 NoSQL MongoDB
图解MongoDB集群部署原理(3)
MongoDB的集群部署方案中有三类角色:实际数据存储结点、配置文件存储结点和路由接入结点。
110 0
|
11月前
|
消息中间件 数据采集 NoSQL
《Apache Flink 案例集(2022版)》——1.数据集成——XTransfer-基Flink MongoDB CDC 在 XTransfer 的生产实践(上)
《Apache Flink 案例集(2022版)》——1.数据集成——XTransfer-基Flink MongoDB CDC 在 XTransfer 的生产实践(上)
150 0
|
11月前
|
SQL 并行计算 NoSQL
《Apache Flink 案例集(2022版)》——1.数据集成——XTransfer-基Flink MongoDB CDC 在 XTransfer 的生产实践(下)
《Apache Flink 案例集(2022版)》——1.数据集成——XTransfer-基Flink MongoDB CDC 在 XTransfer 的生产实践(下)
199 0
|
消息中间件 NoSQL Oracle
Flink MongoDB CDC 在 XTransfer 的生产实践|Flink CDC 专题
Flink-learning 学训平台和 Flink CDC 专题课程来啦!
Flink MongoDB CDC 在 XTransfer 的生产实践|Flink CDC 专题
|
NoSQL MongoDB
《MongoDB 原理与实战 电子书发布 - 张友东》电子版地址
<<MongoDB 原理与实战>> 电子书发布 - 张友东
205 0
《MongoDB 原理与实战 电子书发布 - 张友东》电子版地址
|
存储 JSON NoSQL
MongoDB 的基本概念及原理
MongoDB 的基本概念及原理
MongoDB 的基本概念及原理
|
NoSQL MongoDB
《阿里云MongoDB备份恢复功能说明和原理介绍》电子版地址
阿里云MongoDB备份恢复功能说明和原理介绍
86 0
《阿里云MongoDB备份恢复功能说明和原理介绍》电子版地址

相关产品

  • 云数据库 MongoDB 版