springboot如何整合mongodb 和 changestream的代码例子
时间:2024-02-07 12:09作者:下载吧人气:28
前言
changestream是monggodb的3.6版本之后出现的一种基于collection(数据库集合)的变更事件流,应用程序通过db.collection.watch()这样的命令可以获得被监听对象的实时变更
想必对mysql主从复制原理比较熟悉的同学应该知道,其根本就是从节点通过监听binlog日志,然后解析binlog日志数据达到数据同步的目的,于是,基于mysql主从复制原理,阿里开源了canal这样的数据同步中间件工具
Change Stream 介绍
Chang Stream(变更记录流) 是指collection(数据库集合)的变更事件流,应用程序通过db.collection.watch()这样的命令可以获得被监听对象的实时变更。
关于changestream做如下说明,提供参考
- 在该特性出现之前,开发者可通过拉取 oplog达到同样的目的;
- 但 oplog 的处理及解析相对复杂,而且存在被回滚的风险,如果使用不当的话还会带来性能问题;
- Change Stream 可以与aggregate framework结合使用,对变更集进行进一步的过滤或转换;
- 由于Change Stream 利用了存储在 oplog 中的信息,因此对于单进程部署的MongoDB无法支持Change Stream功能,其只能用于启用了副本集的独立集群或分片集群
changestream可用于监听的mongodb目标类型
- 单个集合,除系统库(admin/local/config)之外的集合,3.6版本支持
- 单个数据库,除系统库(admin/local/config)之外的数据库集合,4.0版本支持
- 整个集群,整个集群内除去系统库( (admin/local/config)之外的集合 ,4.0版本支持
一个Change Stream Event的基本结构如下所示:
{
_id : { <BSON Object> },
“operationType” : “<operation>”,
“fullDocument” : { <document> },
“ns” : {
“db” : “<database>”,
“coll” : “<collection”
},
“documentKey” : { “_id” : <ObjectId> },
“updateDescription” : {
“updatedFields” : { <document> },
“removedFields” : [ “<field>”, … ]
}
“clusterTime” : <Timestamp>,
“txnNumber” : <NumberLong>,
“lsid” : {
“id” : <UUID>,
“uid” : <BinData>
}
}
标签MongoDB,技术文档,数据库,MongoDB
网友评论