【问题标题】:When is mongodb change stream events cleared from the stream何时从流中清除 mongodb 更改流事件
【发布时间】:2019-06-05 09:40:51
【问题描述】:

我了解,当任何监视的 mongo 实体被更改/添加时,mongo 会将这些更改记录在更改流中,应用程序可以收听这些更改。

单个变更流事件何时清除,变更流的最大容量是多少。是否存在由于最大容量限制而在通知订阅者之前从更改流中删除日志的负面情况。

我在他们的官方页面中找不到任何此类数据: https://docs.mongodb.com/manual/changeStreams/

【问题讨论】:

    标签: mongodb changestream


    【解决方案1】:

    变更流使用 oplog 作为其数据的基础。因此,“最大容量”取决于您的 oplog 的大小(请参阅SERVER-13932)。

    只要您关注更改流,就应该实时通知您更改。在这种情况下,oplog 的大小不是问题,因为您正在消耗发生的更改。

    但是,更改流可以是resumed using a resume token,它指向 oplog 中的特定时间戳。当 oplog 翻转时,此恢复令牌现在无效。尝试使用无效的恢复令牌恢复更改流将导致错误:

    resume of change stream was not possible, as the resume token was not found. {_data: <the invalid resume token>}

    此时,如何继续由应用程序决定。

    【讨论】:

    • 我有一个不断增加的数据用例,没有删除,只有插入和更新。我侦听更改流以使我的应用程序内存缓存爆裂。由于应用程序是分布式且可自动扩展的,因此更改流的侦听器数量是动态的,因此我不想从我的应用程序中删除更改流中的事件。我担心一段时间后我的 mongo oplog 会填满。 mongo 在操作日志填满的情况下使用什么策略?我更愿意为我的用例制定 FIFO 删除策略
    • 阅读docs.mongodb.com/manual/core/replica-set-oplog,它解释了您需要了解的有关 oplog 的所有信息。 oplog基本上是一个循环缓冲区,所以它基本上是一个FIFO结构。
    猜你喜欢
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多