【问题标题】:Should I use one projection per entity or category?我应该为每个实体或类别使用一个投影吗?
【发布时间】:2021-03-14 23:29:37
【问题描述】:

我正在使用 Event Store DB 编写一个使用 CQRS+ES 架构的新应用程序。在我的应用中,我有以下流:

  • user-1
  • 用户 2
  • user-3
  • ...

每个流都包含有关给定用户的所有事件。

我现在正在创建一个名为 user-account 的投影,其中包含有关我的用户帐户的基本数据(如名字、电子邮件等)

设计该投影的最佳方式是什么?

我应该为每个用户创建一个投影,创建名为:

  • user-account-1
  • user-account-2
  • user-account-3
  • ...

或者所有用户帐户的单一投影?作为键值对记录(未来可能存储数百万个键)

【问题讨论】:

    标签: cqrs event-sourcing eventstoredb


    【解决方案1】:

    您可以为每个用户使用一个流。投影就像维度。一个用户可以存在于不同的“维度”(CDC 命名)中,并且每个维度都有不同的形状。

    阅读https://www.eventstore.com/blog/the-cost-of-creating-a-stream

    【讨论】:

      【解决方案2】:

      首先,订阅单个流(聚合流或实体流)永远不会起作用。您最终将获得数千个订阅,这些订阅无所事事(用户详细信息多久更改一次?)。

      类别流是一种方法,您将为所有用户投影所有事件。您不仅需要为所有用户订阅一次,而且您还将拥有更多有趣的可能性,例如“等待激活的用户”或“被阻止的用户”预测。

      我更喜欢订阅$all 并在必要时应用服务器端过滤。当您收到比您需要的更多的事件时,它可能会产生一些开销,但通过组合来自不同聚合的事件,您可以获得更多的功能。

      我在Eventuous documentation 中写了一点。

      【讨论】:

        猜你喜欢
        • 2019-09-25
        • 1970-01-01
        • 2020-05-25
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 2015-11-26
        • 1970-01-01
        • 2018-03-20
        相关资源
        最近更新 更多