【五分钟了解MongoDB】Change Stream 和MongoDB 4.x

  • 时间:
  • 浏览:0
  • 来源:大发彩神下载—大发彩神APP

以上的示例是在MongoDB4.x版本中生成的,相比3.6版本,4.x版本新增了有一个_data字段。该字段是有一个恢复token(resume token),应用守护任务管理器也能在重连后从该点进行继续监听。

上述示例将对于任何数据库、任何表的任何变动进行输出,你是什么可是我 是当当我们当当我们 所捕获的全版信息。将会当当我们当当我们 将监听范围倒进了最广,当当我们当当我们 也将会就看在删除collection前一天的删除事件、删除数据库的时间以及重命名collection的事件。

当然,这可是我 是你是什么问题报告 ,将会当当我们当当我们 希望监听数据库将会collection的创建,当当我们当当我们 完会 通过变动内容中的collection来判断算是该表为此前未创建的新表你是什么依据进行。另外,索引的创建将会全版都是为表数据变动可是我 会被监听捕获。

译者:周李洋

Teambition运维总监

MongoDB中文社区联席主席

将会你只须要针对某有一个collection进行变动监听,MongoDB3.6就完会 满足你的需求,否则 对于你是什么此前通过oplog来进行变动监听的同学,当当我们当当我们 的诉求往往是希望监听数据库中的所有变动,以此来将变动应用到一些系统中。MongoDB4.0很好的满足了你是什么诉求,在4.0版本中当当我们当当我们 完会 针对若干个数据库将会整个实例(克隆好友集将会sharding)进行变动监听。与watch()某有一个collection不同,4.0中当当我们当当我们 完会 watch()某个数据库将会整个实例。

MongoDB4.0为当当我们当当我们 带来了有一个全新且强大的数据变动监听依据,尤其是该依据完会 实时进行变动捕获。当当我们当当我们 十分建议你去尝试下你是什么功能。Change Stream的全版文档完会 参考[Change Streams]。将会你还未安装MongoDB4.0实例,你也完会 在MongoDB Atlas中[注册]并获取M0的免费集群节点进行学习和测试。

上述代码首先连接进入了数据实例,并通过watch()函数对“video”库的“movieDetails”表建立了change stream。而后通过.on("change",... 建立了有一个事件trigger,该事件将监听该change stream上的所有变动并调用对应的后续函数。在上述示例中,监听到变动后将会将变动事件打印出来。下面是当当我们当当我们 在 MongoDB Compass中进行对应修改后的输出示例:

ns: { db: 'video', coll: 'movieDetails' },

documentKey: { _id: 5c0ec4b74b052f9e2ef0c381 }

}

在上述的返回中完会 快速的找到此次change stream的重要信息,即通过operationType了解到变动的类型,有关全版的返回说明请参考 [Change Events documentation]。当监听某有一个collection的前一天,operationType的值通常是 insert , update , replace , delete 或 invalidate ,前一种生活的含义通过名字完会 清楚的获知,上述返回的replace类型是当当我们当当我们 通过Compass同collection进行replace操作的反馈。

充分获知数据库的数据变动是从MongoDB向一些数据服务进行数据同步的关键点。与直接查询collection来获取数据变动相比,通过流式的依据进行监听会有效并及时的多。这是一种生活非常强大的“响应式编程”模式。随着MongoDB的版本更新,流式的获取依据将变得那我越易用。

当当我们都当当我们 监听的collection被drop、改名将会其所属的db被drop的前一天,当当我们当当我们 将会就看类型为invalidate的operationType。于此并肩这也原因是前一天关闭change stream了。上述返回中剩下的主次是变动的全版信息,变动发生在你是什么namespace,数据是你是什么样的,几时发生的变更。

当当我们都当当我们 来并肩回顾一下。在MongoDB3.6前一天,将会当当我们当当我们 希望对MongoDB数据库中的数据变动进行监听,当当我们当当我们 通常是通过 “监听并回放oplog”(“tail the oplog”)的模式(oplog表将会记录克隆好友集中的数据变动)。在生产环境中你是什么依据(“监听并回放oplog”)通常较为复杂,否则 难以保证其稳定与可靠性。

从MongoDB3.6开使支持的 Change Streams打破了你是什么僵局。 Change Streams使得数据的变动监听变得简单易用。以下是有一个示例,该示例演示了通过Node.js对“movieDetails”表的变动监听。

当当我们当当我们 完会 根据实际须要选则监听某有一个collection的变动、将会某个数据库中所有collection的变动又将会是整个实例中所有的数据库与collection的变动。须要注意的是创建新collection、数据库的变动将不让被直接监听到,不过当当我们当当我们 完会 通过变动中的内容间接获知。