微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在使用事件存储数据库编写使用 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 举报,一经查实,本站将立刻删除。