我应该为每个实体或类别使用一个投影吗?

Should I use one projection per entity or category?

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

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

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

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

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

或者所有用户帐户的单一预测?是一个键值对记录(将来可能存储数百万个键)

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

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

首先,订阅单个流(聚合或实体流)将永远行不通。您最终会得到数以千计的订阅,它们无所事事地坐在那里(用户详细信息多久更改一次?)。

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

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

我在 Eventuous documentation.

中写了一些关于它的内容