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