MongoDB学习7:Change Strean

MongoDB学习7:Change Strean
1.什么是Change Stream? Change Stream是MongoDB用于实现变更追踪的解决方案,类似于关系型数据库的触发器,但原理不完全相同 …

	MongoDB学习7:Change Strean[数据库教程]

1.什么是Change Stream?

Change Stream是MongoDB用于实现变更追踪的解决方案,类似于关系型数据库的触发器,但原理不完全相同

Change Stream 触发器
触发方式 异步 同步(事务保证)
触发位置 应用回调事件 数据库触发器
触发次数 每个订阅事件的客户端 1次(触发器)
故障恢复 从上一次断点重新触发 事务回滚

2.Change Stream实现原理

Change Stream是基于oplog实现的。它在oplog上开启一个tailable cursor来追踪所有复制集上的变更操作,最终调用应用中定义的回调函数
被追踪的变更事件主要包括:

  • insert/update/delete:插入、更新、删除
  • drop:集合被删除
  • rename:集合被重命名
  • dropDatabase:数据库被删除
  • invalidate:drop/rename/dropDatabase将导致invalidate被触发,并关闭change stream

3.Change Stream与可重复读

Change Stream只推送已经在大多数节点上提交的变更操作。级“可重复度”的变更,这个验证是通过{readConcern:”majority”}实现的,因此

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

4.Change Stream 变更过滤

如果只对某些类型的变更时间感兴趣,可以使用聚合管道的过滤步骤过滤事件

var cs = db.collection.watch([{
  $match:{
    operationType:{
     $in:{"insert","delete"}
    }
  }
}])

5.开启Change Stream功能

默认是没有开启Change Stream功能的,在配置文件中设置

replication:
  enableMajorityReadConcern: true

6.Change Stream 故障恢复

假如在一系列写入操作的过程中,订阅Change Stream的应用在接收到“写3”之后与 t0 时刻崩溃,重启后后续变更怎么办?
技术图片
想要从上次中断的地方继续获取变更流,只需要保留上次变更通知中的_id即可
技术图片
上图所示是一次Change Stream回调所返回的数据。没跳这样的数据都带有一个_id,这个_id可以用于断点恢复,例如:

var cs = db.collection.watch([],{resumeAfter:<_id>})

即可从上一条通知中断处继续获取后续的变更通知

7.Change Steam使用场景

  • 跨集群的变更复制–在源集群中订阅 Change Stream,一旦得到任何变更立即写入目标集群
  • 微服务联动–当一个微服务变更数据库时,其他微服务得到通知并做出相应的变更
  • 其他任何需要系统联动的场景

8.Change Steam 注意事项

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

MongoDB学习7:Change Strean

原文地址:https://www.cnblogs.com/xiaoqingtian/p/13511027.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6734.html

(0)
上一篇 2023-04-04
下一篇 2023-04-04

相关推荐

  • 数据库系统包括什么_oracle存储结构

    数据库系统包括什么_oracle存储结构PostgreSQL数据库体系结构-存储结构 数据库聚簇逻辑结构(Logical Structure of Database Cluster) database cluster–数据库聚簇,是一组…

    2023-02-22
    149
  • Python工程师必知必会——Numpyany基础知识

    Python工程师必知必会——Numpyany基础知识Python是一种功能丰富而又简单易用的编程语言,已经成为数据科学和机器学习领域的主要语言。在数据科学领域中,NumPy是Python中最重要的工具之一。NumPy是一个Python包,提供了高性能数值运算功能和支持大型多维数组和矩阵的数据结构。它支持很多数学操作,例如线性代数、傅里叶变换、随机数生成等等。

    2024-04-29
    108
  • Python String Capitalize: 将字符串的首字母大写

    Python String Capitalize: 将字符串的首字母大写在Python中,字符串是一个不可变的序列,因此字符串的方法都返回一个新的字符串,而不是改变原有字符串。

    2024-01-18
    102
  • Python工程师如何使用pip install安装依赖包?

    Python工程师如何使用pip install安装依赖包?如果你是一名Python工程师,你在编写项目时几乎不可避免地需要使用依赖包。这些依赖包可以帮助你快速开发和部署Python应用程序。如果你是初学者,你可能会对如何安装Python依赖包感到困惑。本文将帮助你理解pip install命令的工作原理,并详细介绍Python工程师如何使用pip install命令来安装和管理Python依赖包。

    2024-07-01
    47
  • Python条件语句:elif用法详解

    Python条件语句:elif用法详解在编程中,条件语句是用来根据条件结果来执行不同代码分支的一种工具。Python中常用的条件语句包括if、elif和else语句。

    2023-12-28
    108
  • 华为智能会议室,远程办公好帮手[通俗易懂]

    华为智能会议室,远程办公好帮手[通俗易懂]现在疫情这么严重,面对面开会不利于防疫政策,这时候可以试试华为云云会议,相比其他云会议软件,它针对性强,光会议室种类就有了五种。而且应用有多种高科技智能设备,让你感受面对面都没有的方便快捷。 华为云云

    2023-05-11
    149
  • macbook窗口快捷键_Mysql排序

    macbook窗口快捷键_Mysql排序1.4、怎么避免笛卡尔积现象?当然是加条件进行过滤;思考:避免了笛卡尔积现象,会减少记录的匹配次数吗?不会,次数还是56次。只不过显示的是有效记录……

    2023-05-01
    123
  • Redis阻塞_redis订阅发布堵塞问题

    Redis阻塞_redis订阅发布堵塞问题可能存在问题 内在原因:API或数据结构使用不合理、CPU饱和、持久化阻塞等 外在原因:CPU竞争、内存交换、网络问题等 问题处理: API或数据结构使用不合理,可能存在慢查询或者大对象: 发现慢查…

    2023-04-01
    164

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注