我建立一個基於訂閱的軟件系統的基礎上,提供的查詢提供通知廣播時,因爲文件的查詢變化的結果由加載改變/刪除/更新。例如,
訂閱
void mySystem.subscribe(collection, QUERY("name" << "abc"), callBack);
哪裏回調定義爲:
void Client::Callback(ChangedDocuments, Operation) { // handle the change }
如果有人致電
mySystem.Add(collection, documentsNameIsAbc)
,回調將被調用,從而使訂閱客戶端通知的變化。
這需要儘快完成,所以像掃描重做日誌這樣的東西不適合我。
可能性
a)一個簡單的方式將記住所有查詢的結果,在每個添加/刪除/更新,再次運行所有查詢,然後發送的diff的通知。
b)更聰明一點的方法是採取變化的文檔(任何數據庫操作之前),檢查它是否'匹配'任何查詢。如果是這樣,發送通知。但是,不支持這種'匹配'的聲音。
c)查詢是以正則表達式格式,將正在更改的文檔序列化爲json格式,並運行正則表達式匹配。
我使用C++,但問題聽起來語言中立。
歡迎任何輸入。
感謝丹。看看視頻,聽起來很酷。將進一步挖掘。 –
「Meteor的DDP實現處理剩下的事情,它智能地輪詢你的數據庫來獲取變化並將它們推送到客戶端。」看起來像他們採取了)的方法。來自:https://www.meteor.com/#blog/2012/03/21/introducing-ddp –