MongoDB的触发器-Change Stream
发布日期:2021-11-15 14:57:41
浏览次数:29
分类:技术文章
本文共 1131 字,大约阅读时间需要 3 分钟。
Change Stream是MongoDB用于实现变更追踪的解决方法,类似关系数据库的触发器。
Change Stream与关系数据库的触发器的对比
Change Stream | 关系数据库的触发器 | |
---|---|---|
触发方式 | 异步 | 同步 |
触发位置 | 应用回调事件 | 数据库触发器 |
触发次数 | 每个订阅事件的客户端 | 1次 |
故障恢复 | 可以从上次断点重新触发 | 事务回滚 |
Change Stream能够跟踪的变更事件包括
- insert/update/delete
- drop
- rename
- dropDatabase
- invalidate
注:drop/rename/dropDatabase将导致invalidate被触发,并关闭Change Stream
Change Stream也可以通过聚合管道的过滤,使它仅仅跟踪某些变更的事件,例:
db.collection.watch([{ $match: { operationType: { $in: ['insert', 'delete'] } }}])
上述例子用于跟踪操作为insert和delete的事件。
Change Stream的故障恢复:
# <_id>为上一次回调所返回的_id值,用于恢复到那次断点db.collection.watch([],{ resumeAfter: <_id>})
Change Stream开启条件
- 配置文件添加replication.enableMajorityReadConcern: true,才可以使用Change Stream
- 若集群中无法满足{w: “majority”}时,将不会触发Change Stream
例如PSA架构中的S因故障宕机,执行操作时将满足{w: “majority”},也就将无法触发Change Stream,故PSA架构不建议使用。
使用场景
- 跨集群的变更复制----源集群中订阅Change Stream,一旦得到任何变更立即写入目标集群
- 微服务联动----一个微服务变更数据库时,通知其他服务做出相应变化
- 需要系统联动的场景
注意
- Change Stream依赖于oplog,中断时间不能超过oplog回收的最大时间窗,如果超过oplog回收的最大时间窗,将无法使Change Stream从上次断点的位置重新触发
- 执行update操作时,如果只更新了部分数据,那么Change Stream通知的也是增量部分
- 执行delete操作时,Change Stream通知的也只是删除数据的_id,并不会通知全部数据
注:MongoDB实例使用Change Stream的代码将在后面有时间的时间粘贴上去
转载地址:https://blog.csdn.net/qq_39741836/article/details/105954965 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月23日 23时09分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
unity3d 根据手指触摸的位置去放置UI
2019-04-27
加锁单例
2019-04-27
unity3D 让粒子在UI上播放
2019-04-27
C++的dll导出类
2019-04-27
Matlab与C++混合编程
2019-04-27
unity3D 射线球体投射碰撞检测
2019-04-27
Unity3D 摇一摇功能
2019-04-27
unity3D 在屏幕边框创建碰撞框
2021-06-30
unity3D 音频播放
2021-06-30
xml中常用的转义符
2021-06-30
腾讯MSDK手Q微信授权登录
2021-06-30
腾讯MSDK for Unity
2019-04-27
关于MSDK的几个难点
2019-04-27
使用UnityEditor做工具
2019-04-27
Visual Studio我常用的快捷键
2019-04-27
写C# dll供Unity调用
2019-04-27
Linux制作run安装包
2019-04-27
一分钟学会C#解析XML
2019-04-27
unity AssetBundle的资源管理
2019-04-27
【转】Unity中HideInInspector和SerializeField一起使用
2019-04-27