我正在创建一种以 MongoDB 作为数据存储的后台作业队列系统。如何在生成工作人员处理作业之前“监听”对 MongoDB 集合的插入?
我是否需要每隔几秒轮询一次以查看是否与上次相比有任何更改,或者我的脚本是否可以等待插入发生?
这是我正在处理的一个 PHP 项目,但可以随意用 Ruby 或与语言无关的方式回答。
最佳答案
您的想法听起来很像触发器。 MongoDB 不支持触发器,但是有些人使用一些技巧“自己动手”。这里的关键是oplog。
当您在副本集中运行 MongoDB 时,所有 MongoDB 操作都会记录到操作日志(称为 oplog)中。 oplog 基本上只是对数据所做修改的运行列表。副本集通过监听此 oplog 上的更改然后在本地应用更改来发挥作用。
这听起来很熟悉吗?
这里我不能详细说明整个过程,它是几页文档,但你需要的工具是可用的。
先写一些关于 oplog 的文章
- Brief description
- Layout of the local
collection (包含 oplog)
您还需要利用 tailable cursors .这些将为您提供一种监听更改而不是轮询更改的方法。请注意,复制使用可尾游标,因此这是受支持的功能。
关于mongodb - 如何监听 MongoDB 集合的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9691316/