2014-02-25 20 views
0

問題MongoDB的:如何建立實時的基於訂閱的通知系統

我建立一個基於訂閱的軟件系統的基礎上,提供的查詢提供通知廣播時,因爲文件的查詢變化的結果由加載改變/刪除/更新。例如,

  1. 訂閱

    void mySystem.subscribe(collection, QUERY("name" << "abc"), callBack); 
    

    哪裏回調定義爲:

    void Client::Callback(ChangedDocuments, Operation) 
    { 
        // handle the change 
    } 
    
  2. 如果有人致電mySystem.Add(collection, documentsNameIsAbc),回調將被調用,從而使訂閱客戶端通知的變化。

這需要儘快完成,所以像掃描重做日誌這樣的東西不適合我。

可能性

a)一個簡單的方式將記住所有查詢的結果,在每個添加/刪除/更新,再次運行所有查詢,然後發送的diff的通知。

b)更聰明一點的方法是採取變化的文檔(任何數據庫操作之前),檢查它是否'匹配'任何查詢。如果是這樣,發送通知。但是,不支持這種'匹配'的聲音。

c)查詢是以正則表達式格式,將正在更改的文檔序列化爲json格式,並運行正則表達式匹配。

我使用C++,但問題聽起來語言中立。

歡迎任何輸入。

回答

0

如果您的語言不可知,您可能需要查看框架。它實現OPLOG拖尾,昨天不約而同新版本發佈了精確的重點是:

Meteor 0.7.1: oplog support for complex queries/scaling Meteor using oplog tailing

+0

感謝丹。看看視頻,聽起來很酷。將進一步挖掘。 –

+0

「Meteor的DDP實現處理剩下的事情,它智能地輪詢你的數據庫來獲取變化並將它們推送到客戶端。」看起來像他們採取了)的方法。來自:https://www.meteor.com/#blog/2012/03/21/introducing-ddp –