返回顶部
首页 > 资讯 > 数据库 >MongoDB学习7:Change Strean
  • 749
分享到

MongoDB学习7:Change Strean

摘要

1.什么是Change Stream? Change Stream是mongoDB用于实现变更追踪的解决方案,类似于关系型数据库的触发器,但原理不完全相同 Change Stream 触发器 触发方式 异步 同步(事务保证)


	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

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB学习7:Change Strean

本文链接: https://lsjlt.com/news/7843.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MongoDB学习7:Change Strean
    1.什么是Change Stream? Change Stream是MongoDB用于实现变更追踪的解决方案,类似于关系型数据库的触发器,但原理不完全相同 Change Stream 触发器 触发方式 异步 同步(事务保证)...
    99+
    2015-04-25
    MongoDB学习7:Change Strean 数据库入门 数据库基础教程 数据库 mysql
  • 【MongoDB学习笔记7】深入MongoDB的删除(remove/drop)操作
    先看集合post中文档信息:   > db.post.find();     { "_id" : Object...
    99+
    2024-04-02
  • 学习MongoDB(一)
    一 . MongoDB 1.概述 CMS采用MongoDB数据库存储CMS页面信息,CMS选用Mongodb的原因如下: 1、Mongodb是非关系型数据库,存储Json格式数据 ,数据格式灵活。 2、相比课程管理等核心数据CMS数...
    99+
    2014-10-12
    学习MongoDB(一)
  • oracle 函数学习 Oracle10g学习系列(7)
    Oracle函数有字符函数、数学函数、日期函数和转换函数。我只了解了字符函数和数学函数。一、字符函数:lower(char)  将字符串转化为小写的格式SQL> select lo...
    99+
    2024-04-02
  • python 学习笔记 7 -- Pyt
    学习一门语言最重要的功课是练习与复习,在《笨方法学Python》中第三十七节虽然没有教你任何内容,但是它提醒我们:“学了这么多,你还能记得多少?该复习了!”下面我们就对这一节的第一部分“关键字”来做个复习:Python中的关键字包括如下:a...
    99+
    2023-01-31
    学习笔记 python Pyt
  • Mongodb学习总结
    Mongodb相关操作总结 2020/4/2 Mongodb使用的是类似与json字符串的形式存储数据 [ { key:value }, { key:value }, ] Mongodb使用了不存在的对...
    99+
    2019-08-19
    Mongodb学习总结
  • mongodb 学习之oplog
    背景:   原来一个同事问我主从mongodb数据库为什么数据差距很大,我让他察看一下两边有啥不一样,发现主的local库有13G从却很小,进入local之后du发现有一个collect...
    99+
    2024-04-02
  • MongoDB学习系列
    用mongodb已经有3年多时间,但是一直没有系统的学习过,更多时候是在问题中摸索,随着最近遇到的问题越来越多,回过头系统的了解下这个数据库,就显得格外有必要了。本稿将从如下几个方面介绍,当然文中内参阅了很...
    99+
    2024-04-02
  • MongoDB学习(三) --- MongoDB Java入门
    1、搭建测试环境 步骤一:创建 maven 项目 父项目的pom文件 4.0.0 com.tqylxuecheng xc_parent pom 1.0-SNAPSHOT ...
    99+
    2022-03-31
    MongoDB学习(三) --- MongoDB Java入门
  • MongoDB学习(四) --- MongoDB 整合Spring Data
    1、环境搭建 步骤一:修改pom文件,更新依赖 org.springframework.boot spring-boot-starter-data-mongodb org.projectlombok lombok ...
    99+
    2021-09-17
    MongoDB学习(四) --- MongoDB 整合Spring Data
  • mongodb的学习过程
        近段时间感觉有点迷茫了,不知道该做什么,今天上班看看自己的监控数据,想想能不能为了读写速度我把数据写入到mongodb里面这种非关系型数据库里面呢,下面开始学习mong...
    99+
    2024-04-02
  • 【MongoDB学习笔记20】MongoDB的索引
    MongoDB的索引和关系型数据库的索引概念和功能是相同的:(1)不使用索引的搜索可以称为全表扫面,也就是说,服务器必须找完整个表才能查询整个结果;(2)建立索引后搜索,查询在索引中搜索,在索引的条目中找到...
    99+
    2024-04-02
  • 笨办法学Python - 习题6-7:
    目录 1、习题 6: 字符串(string) 和文本 2、加分习题: 3、我的答案 4、习题总结 5、习题 7: 更多打...
    99+
    2023-01-30
    习题 法学 Python
  • python学习-7 条件语句 whil
    1.死循环 while 1 == 1: print('ok') 结果是一直循环     2.循环 count = 0 while count < 10: print(count) count =...
    99+
    2023-01-31
    语句 条件 python
  • Python自动化开发学习7
    class A 经典类写法,查找方式深度优先class A(object) 新式类写法,查找方式广度优先上面是python2的语法,python3里可能已经没有经典类了。不管有没有,都用形式类来写就对了。上面都是上节讲的内容,再讲一下构造...
    99+
    2023-01-31
    Python
  • MongoDB学习笔记:概述
    本文更新于2022-01-23,使用MongoDB 4.4.5。 目录与关系数据库比较组成数据库集合文档数据类型填充因子写入安全自然排序固定集合循环游标索引典型场景GridFS聚合MapReduce副本集同步心跳驱动程序分片连接身份验证系...
    99+
    2016-10-31
    MongoDB学习笔记:概述
  • MongoDB学习笔记:分片
    本文更新于2022-01-08,使用MongoDB 4.4.5。 目录单台服务器下创建分片多台服务器下创建分片重新启动并连接到分片 单台服务器下创建分片 确保/data/db目录存在且当前系统用户有读写权限。例如(需根据实际情况设置权...
    99+
    2021-03-30
    MongoDB学习笔记:分片
  • MongoDB学习笔记:JavaScript shell
    本文更新于2022-01-22,使用MongoDB 4.4.5。 目录辅助扩展edithelpitshow collectionsshow databasesshow dbsshow tablesshow usersuseBulkWrit...
    99+
    2021-02-08
    MongoDB学习笔记:JavaScript shell
  • MongoDB学习笔记:总览
    【MongoDB学习笔记1】基于CentOS 6.5安装MongoDBhttp://281816327.blog.51cto.com/907015/1598270 【MongoDB学习笔记2】Mo...
    99+
    2024-04-02
  • MongoDB Sharding学习理论篇
    MongoDB Sharding技术是MongoDB为了解决随着数据量的增加和读写请求的增加,单个MongoDB实例无法应对的问题.通过使用Sharding,MongoDB将数据切分成多个部分,将数据分布存...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作