MongoDb:如何构建基于实时订阅的通知系统

时间:2014-02-25 12:48:00

标签: c++ mongodb push-notification

问题

我正在构建一个基于订阅的软件系统,当查询结果因添加/删除/更新更改的文档而发生更改时,该系统会根据提供的查询提供通知提要。例如,

  1. 订阅

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

    其中回调定义为:

    void Client::Callback(ChangedDocuments, Operation)
    {
        // handle the change
    }
    
  2. 如果有人调用mySystem.Add(collection, documentsNameIsAbc),将调用回调,以便通知订阅客户端更改。

  3. 这需要尽快完成,所以像扫描重做日志这样的东西对我来说不起作用。

    可能性

    a)一种天真的方式是记住所有查询的结果,在每次添加/删除/更新后,再次运行所有查询,然后发送差异作为通知。

    b)更聪明的方法是更改​​文档(在任何数据库操作之前),检查它是否与任何查询“匹配”。如果是,请发送通知。但是,不支持这种“匹配”的声音。

    c)以正则表达式格式化查询,将更改文档序列化为json格式,并运行正则表达式匹配。

    我正在使用C ++,虽然问题听起来是语言中立的。

    欢迎任何意见。

1 个答案:

答案 0 :(得分:0)

如果您与语言无关,则可能需要查看框架。它实现了oplog拖尾,巧合的是,昨天发布了一个新版本,正好关注它:

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