【问题标题】:How to update my video read model in CQRS如何在 CQRS 中更新我的视频阅读模型
【发布时间】:2021-02-10 12:12:54
【问题描述】:

我有一个使用 CQRS 的应用程序,在这个应用程序中存在聚合,例如用户视频标签,它们被持久化并将事件发送到查询端以持久化读取模型。

我想知道视频的观看次数和分享次数。因此,每次用户观看或分享视频时,我都想增加这些计数。如何只更新视频读取模型?因为在我的视频编写模型中,我没有观看次数和分享次数。我应该创建一个命令来发送事件并更新读取模型还是直接更新读取模型?

【问题讨论】:

    标签: domain-driven-design cqrs


    【解决方案1】:

    查看和共享分析的有界上下文很可能与视频有界上下文正交。因此,这些事件由其他一些分析引擎处理和存储。

    读取模型本身不应存储任何无法从真实来源重建的状态。 IE。您应该能够从头开始删除并重新创建读取模型(我不是在谈论它可能需要的计算资源)。但是读取模型可以(并且通常是)跨域。 IE。它查询数据的多个有界上下文。在您的情况下,它可能会查询视频和视频分析。

    【讨论】:

    • 让我直截了当地说,我必须创建一个称为视频分析的有界上下文并存储要重建的事件并将它们发送以创建读取模型。例如,当用户观看视频时发送命令: addVideoViewsCountCommand 该命令必须存储事件并发送它以稍后创建/更新读取模型。对吗?
    • 分析有点不同。观点不是命令,它是你不能拒绝的纯粹事实。您不必在这里做出决定 - 只需注册视图事实。因此没有命令——只是更新(或者更确切地说是创建)。通常当有很多事情要跟踪时,RDBMS 可能会成为瓶颈。根据您是否可以容忍一些损失,您可以考虑使用 Prometheus 或 Cassandra。然后定期使用一些批处理作业更新读取模型。但作为一个概念,只需使用 RDBMS。不要推送每个事件来读取模型,而是让它拉批次
    猜你喜欢
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2013-10-26
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多