MongoDB的触发器-Change Stream

2020-04-15  本文已影响0人  let懒

Change Stream是MongoDB用于实现变更追踪的解决方法,类似关系数据库的触发器。

Change Stream与关系数据库的触发器的对比

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

Change Stream能够跟踪的变更事件包括

注: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开启条件

例如PSA架构中的S因故障宕机,执行操作时将满足{w: "majority"},也就将无法触发Change Stream,故PSA架构不建议使用。

使用场景

注意


注:MongoDB实例使用Change Stream的代码将在后面有时间的时间粘贴上去

上一篇下一篇

猜你喜欢

热点阅读