MongoDb:如何构建基于订阅的实时通知系统
MongoDb: How to build realtime subscription based notification system
问题
我正在构建一个基于订阅的软件系统,当查询结果因添加/删除/更新而更改时,该系统会根据提供的查询提供通知源。例如,
-
订阅
void mySystem.subscribe(collection, QUERY("name" << "abc"), callBack);
其中回调定义为:
void Client::Callback(ChangedDocuments, Operation) { // handle the change }
-
如果有人调用
mySystem.Add(collection, documentsNameIsAbc)
,则会调用回调,以便向订阅客户端通知更改。
这需要尽快完成,所以像扫描重做日志这样的东西对我来说不起作用。
可能性
a) 一种简单的方法是记住所有查询的结果,在每次添加/删除/更新之后,再次运行所有查询,然后将diff作为通知发送。
b) 更聪明的方法是(在任何数据库操作之前)获取正在更改的文档,检查它是否"匹配"任何查询。如果是,请发送通知。但是,听起来不支持这种"匹配"。
c) 获取regex格式的查询,将更改后的文档序列化为json格式,然后运行regex-match。
我使用的是C++,尽管这个问题听起来与语言无关。
欢迎任何意见。
如果你是语言不可知论者,你可能想看看流星框架。它实现了oplog跟踪,巧合的是,昨天发布了一个新版本,它正专注于此:
Meteor 0.7.1:oplog支持复杂查询/缩放Meteor使用oplog尾随
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- c++r值引用应用于函数指针
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如何仅使用对象名称打印特定于对象的成员
- 相当于LocaleMatcher的ICU4C
- 等<thing>效于char32_t
- 类似于strcat()的函数出现问题
- 从数据库实时显示QT c++中的数据
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 算术运算的结果类似于:C浮点变量中的1/3
- 相当于 pybind11 中的 boost::p ython py::scope().attr()
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- 如何将记忆应用于此递归函数?
- 对对应于矩阵的行和列的对向量进行排序
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- createFile() 和 DeviceIoControl() 等效于 Unix/Linux 中的卷设备
- MongoDb:如何构建基于订阅的实时通知系统