简介
Change Stream可以直译为"变更流",也就是说会将数据库中的所有变更以流式的方式呈现出来。用户可以很方便地对数据库建立一个监听(订阅)进程,一旦数据库发生变更,使用change stream的客户端都可以收到相应的通知。使用场景可以包括但不限于以下几种:
多个MongoDB集群之间的增量数据同步;
高风险操作的审计(删库删表);
将MongoDB的变更订阅到其他关联系统实现离线分析/计算等等;
特征
change stream的一些特性事项
change stream对于副本集和分片集群都可用。副本集时,可以在副本集中任意一个成员上建立监听流;分片集群时则只能在mongos上建立监听流。
使用条件:1)WT引擎;2)副本集协议为
pv1
;3)4.0及以前的版本,要求支持readConcern为“majority”
。粒度可调整,可选择配置在单个表、单个库或者整个集群上。但是无法配置为
admin/local/config
库或者system.xxx
表。4.0以后的版本可以指定
startAtOperationTime
来表示在某个特定的时间开始监听change Stream。但是要求给定的时间点必须在所选择节点的有效oplog时间范围中。
使用
1. 搭建集群
下面通过搭建一个单节点的副本集mongodb来试验下
修改配置并启动
bind_ip=0.0.0.0
port=27017
replSet=ts
fork=true # 以创建子进程的方式运行
dbpath=/data/mongodb/db #日志输出方式数据库路径
logappend=true #日志输出方式,日志append而不是overwrite
logpath=/data/mongodb/logs/mongo.log #日志路径
auth=false #开启安全验证(可以不开启)
配置集群
> cfg = {"_id" : "ts", "members" : [{"_id" : 0,"host" : "9.135.77.164:27017"}]}
{
"_id" : "ts",
"members" : [
{
"_id" : 0,
"host" : "9.135.77.164:27017"
}
]
}
>
>
> rs.initiate(cfg)
{ "ok" : 1 }
查看状态
ts:PRIMARY> rs.status()
{
"set" : "ts",
"date" : ISODate("2023-04-03T03:33:48.813Z"),
"myState"