mongodb - Tailable 游标与更改流,用于通知上限集合中的插入操作
问题描述
我很好奇在可用性和性能方面,使用可尾游标与带有过滤器的更改流对上限集合进行插入操作的优缺点。
我有一个包含更新对象的上限集合。此集合唯一可能的操作是插入新更新(作为新记录),我需要将其中继到我的应用程序后端并通过 SSE/WebSockets 实时分发。我将在订阅查询中使用单个参数,它是一个时间戳,它是对象属性的一部分。该集合在该字段上有一个索引。我还将对新添加的记录进行一些基本过滤,因此 Change Streams 的聚合框架会有所帮助。
我读过:MongoDB 中的 changeStream 和可尾游标之间有什么区别,它总结了可尾游标和更改流之间的区别。
此外,关于Capped Collections的 mongodb 文章只说明了 Tailable 游标方法,而关于 Tailable 游标的文章指出它们不使用索引,您应该使用普通游标来获取结果。
简而言之,我需要一个可靠的集合更新流,完全基于在集合中插入新记录。我应该采用哪种方法?
解决方案
Tailable cursors 和 capped collections 被创建来支持将 oplog 从主节点复制到辅助节点。对于任何其他活动,推荐的方法是ChangeStream。变更流与 MongoDB 身份验证模型集成,可以在集合、数据库、集群和分片集群级别获取变更流。Tailable 游标仅适用于单个集合并且不可恢复。所有官方MongoDB 驱动程序都支持更改流。
推荐阅读
- markdown - 如何阻止 SvelteKit 将 Markdown MDSVEX 作为组件处理?
- reactjs - 如何在 React.js 组件中呈现获取请求?
- ruby-on-rails - 如何使用 `Searchkick.multi_search` 和 `with_highlights`?未定义的方法“with_highlights”
- javascript - 无法从浏览器中的 JS 将文件放入谷歌云存储桶
- c++ - 注册表查询信息给出了不正确的值
- sqlite - 有没有办法在 EF Core 的 Sqlite 提供程序中包含 math.dll?
- java - Maven - 无法解析 net.dv8tion:JDA:4.3.0_234
- rxjs - 返回 Observable 类型的 rxjs 函数
- c - 仅使用 usbmon 重建 USB 音频数据包(并播放它们)
- python - 从 Python 中的 JSON 中删除负值