MongoDB 有一個叫 Tailable Cursors的特性,它相似於tail -f 命令,你在一個Capped Collection上面執行查詢操做,當操做完成後,你能夠不關閉返回的數據Cursor,並持續地從中讀出新加入的數據。node
這個特性能夠用來幹什麼?我以爲最直接的一個用途就是用做消息隊列了,利用此特性加上MongoDB 自然的Replication 機制,作一個分佈式的隊列系統貌似不是什麼難事。linux
Capped collections 就是固定大小的collection。 它有很高的性能以及隊列過時的特性(過時按照插入的順序)。 有點和 "RRD" 概念相似。git
What RRDtool does?github
RRDtool is the OpenSource industry standard, high performance data logging and graphing system for time series data.mongodb
**注:**Tailable Cursor在概念上,相似於Unix的tail命令的-f選項,即一種‘follow’模式。數據庫
建立一個 Capped Collection編程
db.createCollection("mycoll", {capped:true, size:100000})緩存
和標準的collection不一樣,你必需要顯式的建立一個capped collection, 指定一個collection的大小,單位是字節。collection的數據存儲空間值提早分配的。 要注意的是指定的存儲大小包含了數據庫的頭信息。app
日誌Logging.分佈式
緩存Caching.
自動存檔Auto Archiving.
使用tailable cursors
示例: oplog
注:
var filter = {}; // set MongoDB cursor options var cursorOptions = { tailable: true, awaitdata: true, numberOfRetries: -1 }; // create stream and listen var stream = coll.find(filter, cursorOptions).sort({$natural: -1}).stream(); // call the callback stream.on('data', function(document) { console.log(document); });
項目地址: https://github.com/scttnlsn/mubsub
mubsub基於node.js和mongoDB實現發佈,訂閱消息。
使用mongo的capped collections和tailable cursors,當插入指定文檔時,通知訂閱者。