MongoDB-Change Stream

devtools/2024/11/8 22:46:30/
  • Change Stream 指数据的变化事件流,MongoDB从3.6版本开始提供订阅数据变更的功能

    • 是用于实现变更追踪的解决方案
    • Change Stream
  • Change Stream 的实现原理:是基于 oplog 实现的,提供推送实时增量的推送功能

    • 它在 oplog 上开启一个 tailable cursor 来追踪所有复制集上的变更操作,最终调用应用中定义的回调函数
    • 被追踪的变更事件主要包括
      • insert/update/delete:插入、更新、删除;
      • drop:集合被删除;
      • rename:集合被重命名;
      • dropDatabase:数据库被删除;
      • invalidate:drop/rename/dropDatabase 将导致 invalidate 被触发, 并关闭 change stream;
  • 如果只对某些类型的变更事件感兴趣,可以使用使用聚合管道的过滤步骤过滤事件

    • var cs = db.user.watch([{ $match:{operationType:{$in:["insert","delete"]}} }])
  • Change Stream会采用 readConcern:majority 这样的一致性级别,保证写入的变更不会被回滚

    • 未开启 majority readConcern 的集群无法使用 Change Stream;
    • 当集群无法满足 {w:majority} 时,不会触发 Change Stream(例如 PSA 架构 中的 S 因故障宕机)
  • Change Stream 故障恢复

    • Change Stream 故障恢复

    • 假设在一系列写入操作的过程中,订阅 Change Stream 的应用在接收到“写3”之后 于 t0 时刻崩溃

      • 想要从上次中断的地方继续获取变更流,只需要保留上次变更通知中的 _id 即可
      • Change Stream 回调所返回的的数据带有 _id,这个 _id 可以用于断点恢复
      • var cs = db.collection.watch([], {resumeAfter: <_id>})
  • 使用场景

    • 跨集群的变更复制——在源集群中订阅 Change Stream,一旦得到任何变更立即写入目标集群
    • 微服务联动——当一个微服务变更数据库时,其他微服务得到通知并做出相应的变更
    • 其他任何需要系统联动的场景
      • 监控;消息推送
      • 分析平台:推到下游的计算平台
      • 数据同步:热备份;冷备份
  • 注意事项

    • Change Stream 依赖于 oplog,因此中断时间不可超过 oplog 回收的最大时间窗
    • 在执行 update 操作时,如果只更新了部分数据,那么 Change Stream 通知的也是增量部分
    • 删除数据时通知的仅是删除数据的 _id

http://www.ppmy.cn/devtools/107942.html

相关文章

国内外大模型汇总(包括科大星火、文心一言、通义千问、智普清言、华为大模型)

国内外大模型汇总 1. 科大讯飞星火认知大模型 主要特点&#xff1a; 多语言能力&#xff1a;以中文为核心&#xff0c;同时支持多语言处理&#xff0c;能够进行跨语种的语言理解和生成。 广泛的任务能力&#xff1a;具备内容生成、语言理解、知识问答、推理、数学计算、代码…

Docker 安装 MySQL 8.0 并支持远程访问

Docker 安装 MySQL 8.0 完成下面需求&#xff1a; 支持远程访问、数据与日志文件映射端口外部映射其他容器的网络访问 可以按照以下步骤进行配置&#xff0c;进行配置和完成了。 1. 准备工作 首先&#xff0c;确保 Docker 正常安装并运行&#xff0c;然后执行以下步骤。 2. …

第二届金牌导游大赛活动方案

1.风采展示&#xff1a; 每位选手进行1 分钟的个人展示(先观看1分钟视频&#xff0c;尔 后1分钟个人介绍),应从“职业感悟”“家乡美”“旅游人”“旅 途事”四个主题中选择一个主题&#xff0c;结合自我介绍、符合导游职业 特点的才艺进行创编&#xff0c;讲好导游自身、普通…

身份验证技术应用10大关键趋势

身份验证是现代企业网络安全的基石&#xff0c;确保只有经过授权的用户或实体才能访问敏感信息或系统。近年来&#xff0c;身份验证技术取得了显著进展&#xff0c;如无密码身份验证、多因素身份验证和社交验证登录等新兴技术不断涌现&#xff0c;正在重塑传统身份验证的方式和…

用RPC Performance Inspector 优化你的区块链

目录 什么是RPC&#xff1f; RPC Performance Inspector 是做什么的&#xff1f; 为什么需要这个工具&#xff1f; 如何使用它&#xff1f; 适合谁用&#xff1f; 如何使用&#xff1f; 什么是RPC&#xff1f; RPC Performance Inspector 是一个专门用于测试和分析RPC性能…

【华为OD】2024D卷——停车场车辆统计

题目描述&#xff1a; 特定大小的停车场&#xff0c;数组cars[]表示&#xff0c;其中1表示有车&#xff0c;0表示没车。 车辆大小不一&#xff0c;小车占一个车位&#xff08;长度1&#xff09;&#xff0c;货车占两个车位&#xff08;长度2&#xff09;&#xff0c;卡车占三个…

安卓-音频焦点

安卓-音频焦点 音频焦点是什么怎么做 音频焦点 是什么 一个安卓系统肯定会有多个音源&#xff0c;音频焦点是用来处理这些音源的冲突 eg 在播放网易云的时候 打开抖音 网易云会自动暂停 并且网易云有提醒 其实是网易云做了处理 发者需要明确编写代码来请求和处理音频焦点的变…

版本控制系统Git/Gitlab/GitHub

版本控制系统 git和svn:公司内部的代码仓库&#xff0c;用于存放项目代码&#xff0c;方便整合开发过程 公共代码仓库&#xff1a;github全球 gitee国内 git 分布式 ---没有中心代码库&#xff0c;所有机器之间的地位同等&#xff08;每台机器上都有相同的代码&#xff09; …