mongodb - 如何监听 MongoDB 集合的变化?

标签 mongodb

我正在创建一种以 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/

相关文章:

c++ - Mongo - 从值中获取 view_or_value?

mongodb - 如何在 MongoDB 中索引 "or"?

java - spring-data-mongodb: findAll() 包含输入文档列表和嵌入式 DBRef 文档的搜索参数

c# - Mongodb 聚合组然后使用 C# 进行条件求和

php - 如何在 Windows 中使用 XAMPP 和 mongodb?

mongodb - meteor 应用程序在 vagrant share 上的问题

mongodb - 在mongoDB中通过_id搜索效率更高吗?

php - 如何以原子方式重新排序 MongoDB 中的数组项?

arrays - 将数组中元素的字段与 MongoDB 中的字段进行比较

mongodb - 将 ISODate 字符串转换为 mongoDB 原生 ISODate 数据类型