MongoDB学习【五】Change Streams

Change Streams

一、Change Stream是什么?

Change Stream是MongoDB从3.6开始支持的新特性。

Change Stream即变更流,是MongoDB向应用发布数据变更的一种方式。即当数据库中有任何数据发生变化,应用端都可以得到通知。我们可以将其理解为在应用中执行的触发器。至于应用想得到什么数据,以什么形式得到数据,则可以通过聚合框架加以过滤和转换。

参考地址:https://mongoing.com/change-stream

官方文档地址:https://docs.mongodb.com/manual/changeStreams/

二、Change Stream的原理

我们先来看一下MongoDB复制集大致是如何工作的:

  1. 应用通过驱动向数据库发起写入请求;
  2. 在同一个事务中,MongoDB完成oplog和集合的修改;
  3. oplog被其他从节点拉走;
  4. 从节点应用得到的oplog,同样在一个事务中完成对oplog和集合的修改;

至此,复制集同步完成。可以发现,整个同步过程是依赖于oplog来进行的。如果观测oplog的变化,就能够得到所有变更的数据。change stream正是基于这个原理实现的。

三、Change Stream的使用

启动复制集,打开一个shell,订阅你需要关注的集合,并在这个shell中不断遍历这个游标以获取新数据:

rs_test:SECONDARY> var cursor = db.score.watch()
rs_test:SECONDARY> while(true){if(cursor.hasNext()){print(JSON.stringify(cursor.next()))}}

接下来打开另一个shell做CRUD的基本操作,以测试不同的Change Events输出的变更内容:

1、insert Event

rs_test:PRIMARY> db.score.insert({uid:"uid20001",grade:5,class:1,subject:"math",score:90,createTime:Date()})

插入数据时,输出变更数据如下:

{
    "_id":{
        "_data":"825F02F125000000012B022C0100296E5A10044B22BC6860404A9C96301E8CEC60899E46645F696400645F02F125E7BA0AAA65B2E6F90004"
    },
    "operationType":"insert",
    "clusterTime":{
        "$timestamp":{
            "t":1594028325,
            "i":1
        }
    },
    "fullDocument":{
        "_id":{
            "$oid":"5f02f125e7ba0aaa65b2e6f9"
        },
        "uid":"uid20001",
        "grade":5,
        "class":1,
        "subject":"math",
        "score":90,
        "createTim
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值