什么是mongodb的changeStreamchangeStream是mongodb基于oplog(操作日志)的实时的数据变更流,运用程序可以通过changeStream实现对mongo数据变更的订阅,我们可以理解为MySQL中的触发器或者基于binlog复制的从节点。如何利用changeSteam可以对某个db/colletion/deployment进行监听(watch)监听的事宜(event)包括insert Event、Update Event、Replace Event、 delete Event等事宜利用场景可以利用这个特性实现对mongo中数据变更的监听,进行数据同步、复制等操作,举个栗子,公司原始系统利用PHP+MySQL进行做事,后续经由发展,账号做事越来越繁芜,账号属性多变,数据存储切换至MongoDB,采取Java进行新做事供应,但是老系统又不能一时砍掉,砍掉我们就要丢饭碗了,那数据流从mongo到MySQL如何进行同步呢,一个办法便是可以利用changeStream 进行。代码实现这里我通过一个大略的demo来学习changeStream条件准备安装MongoDBmongodb须要开启复制集,也便是必须要主从,部分版本须要开启 enableMajorityReadConcern: true安装PHPmongdoDB扩展,把稳事变mongodb扩展而不是mongocomposer 安装php-mongodb包实现 详细实现后面贴图配置mongodb的复制集, mongo.conf 在代码实例中,这里我们利用一主两从启动 mongod -f /Users/gaoz/project13/mongo/db1/mongod.conf启动监听客户端 php index.php通过mongoshell进行数据insert/update操作把稳事变在实际的利用过程中,要把稳数据丢失的情形考虑大量数据变更的发生,加入Mq中间件进行处理做好做事故障监听
启动mongod做事,这里创建三个/mongo/db 分别为db1, db2, db3, 端口分别为28017,28018,28019
启动mongo监听脚本
通过mongoshell 操作数据

更新数据
监听脚本接管到数据变更
看一下接管到数据
这里重点关注三个内容
operationType: 操作类型,可能是update、insert、replace等
fullDocument: 文档内容
如果是更新的话,updateFields则是变更内容
后续的利用,比如同步到MySQL,大家可以在监听脚本中加入同步逻辑即可。
参考资料官方文档:https://docs.mongodb.com/manual/changeStreams/php-mongodb扩展 http://pecl.php.net/package/mongodbphp-mongodb composer包 https://github.com/mongodb/mongo-php-library
参考代码 https://github.com/nobody05/mongo-changestream-php
个人学习利用,欢迎示正谈论。