如何解决我应该为每个实体或类别使用一个投影吗?
我正在使用事件存储数据库编写使用 CQRS+ES 架构的新应用程序。在我的应用中,我有以下流:
- user-1
- user-2
- user-3
- ...
每个流都包含有关给定用户的所有事件。
我现在正在创建一个名为 user-account 的投影,其中包含有关我的用户帐户的基本数据(如名字、电子邮件等)
设计该投影的最佳方法是什么?
- user-account-1
- user-account-2
- user-account-3
- ...
还是所有用户帐户的单个投影?成为一个键值对记录(未来可能存储数百万个键)
解决方法
您可以为每个用户使用一个流。投影就像尺寸。一个用户可以存在于不同的“维度”(CDC 命名)中,并且每个维度都有不同的形状。
阅读https://www.eventstore.com/blog/the-cost-of-creating-a-stream
,首先,订阅单个流(聚合流或实体流)是行不通的。您最终会收到数以千计的订阅,它们坐在那里什么也不做(用户详细信息多久更改一次?)。
类别流是一种方法,您将为所有用户投影所有事件。您不仅需要为所有用户订阅一份,而且还有更多有趣的可能性,例如“用户等待激活”或“被阻止的用户”预测。
我更喜欢订阅 $all
并在必要时应用服务器端过滤。当您接收到比您需要的更多事件时,它可能会产生一些开销,但通过组合来自不同聚合的事件,您可以获得更多的功能。
我在 Eventuous documentation 中写了一点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。