MongoDB本身不会实现事件消息传递。您本身不能获得关于数据库,馆藏或文档更新的信息。
但是,MongoDB集成了一个'operation log'功能,该功能允许您访问集合上每个写入操作的日志日志。
日志日志用于MongoDB副本,即群集同步功能。为了激活oplogs
,您需要至少有两个MongoDB实例,一个主服务器和一个a replicate。
操作日志基于capped collection
功能构建,该功能允许通过只追加机制构建集合,这可确保快速写入和尾随游标。作者说:
oplog内部存在一个封顶的集合,所以你不能在正常操作过程中修改它的大小 。
MongoDB - Change the Size of the Oplog
和:
封顶集合是支持 是插入和检索基于 插入顺序文件的高通量操作固定大小的集合。 Capped集合的工作方式与循环 缓冲区类似:一旦集合填满其分配的空间,它将通过覆盖 集合中最早的文档为新文档创建空间 。
MongoDB - Capped Collections
操作日志轴颈内的文件的模式是这样的:
"ts" : Timestamp(1395663575, 1),
"h" : NumberLong("-5872498803080442915"),
"v" : 2,
"op" : "i",
"ns" : "wiktory.items",
"o" : {
"_id" : ObjectId("533022d70d7e2c31d4490d22"),
"author" : "JRR Hartley",
"title" : "Flyfishing"
}
}
例如:"op" : "i"
装置操作是插入和"o"
是插入的对象。
用同样的方法,你可以获知update
操作:
"op" : "u",
"ns" : "wiktory.items",
"o2" : {
"_id" : ObjectId("533022d70d7e2c31d4490d22")
},
"o" : {
"$set" : {
"outofprint" : true
}
}
注意,操作日志(您访问它们的集合)无论是在磁盘大小或条目编号(FIFO)的限制。这意味着,最终,无论您的oplog使用者是否比oplog编写者都慢,您将错过操作日志条目,从而导致损坏的使用结果。
这就是为什么MongoDB是可怕的保证在高sollicited集群文件跟踪的原因,以及为什么如Apache Kafka的信息解决方案来作为补充事件跟踪的原因(例如:事件document update
)
要回答你的问题:在一个合理的请求环境中,你可能想看看Javascript Meteor project,它允许你基于查询结果的变化触发事件,并依赖于MongoDB的oplog特性。
现金oplogs例子从The MongoDB Oplog