6

是否可以通过其他 Stream 属性而不是 StreamId 来搜索流?例如,如果每个流的 Headers 中都有 CustomerId,我想搜索具有特定 CustomerId 的所有流。

4

4 回答 4

9

事件存储旨在支持仅通过实体的键进行检索。为了支持通过其他属性进行检索,数据以最终一致的、非规范化的方式索引,专门针对每个用例和单独的位置。因此,事件存储仅存储事件并支持查询任何排序索引投影。这些有点像关系数据库中的持久视图,但它们可以存储在简单的键值存储中。事件存储和投影存储共同构成了CQRS +事件溯源架构背后的基础设施的一部分。查看此处和该博客的其余部分,了解有关此主题的更多信息。

于 2012-07-16T00:19:10.973 回答
2

您可能正在尝试错误地使用事件存储。事件存储仅用于保存和读取已提交事件流以重建事件源聚合。实现提供了用于方便地实现基础设施关注点的标头,例如请求/响应相关 ID、审计、安全等。如果您发现自己在其中放置了业务属性(例如客户 ID),那么您可能需要按照 @eulerfx 的建议构建读取模型。

如果它是您要查找的 ID,那么您应该考虑将 CustomerID 设为该客户的实际事件流 ID。通过 ID 加载特定客户正是您期望事件存储执行的操作。

于 2012-07-16T07:25:03.570 回答
2

EventStore 现在有可以做你正在寻找的预测。请参阅此博客了解详细信息

http://geteventstore.com/blog/20130227/projections-6-an-indexing-use-case/

于 2014-08-01T19:53:39.137 回答
0

尽管它可能不是查找某些内容的最有效方式,但如果您确实需要一个流列表以便您可以搜索它们或找到特定的流,则有一个 $streams 系统投影,但需要先启用它才能使用它使用类似这样的PowerShell:

uri$ = http://${EventStoreIP}:${EventStoreHttpPort}/projection/${projection}/command/enable

$result = Invoke-WebRequest -Method Post -Uri $uri -UseBasicParsing -TimeoutSec 90 -Headers @{
    Authorization = Get-BasicAuthCredentials
}

其中 $projection 是“$streams”。另请查看可以以相同方式启用的其他系统投影,这可能会更准确地提供您需要的内容,这些内容在此处记录:https ://eventstore.org/docs/projections/system-projections/

于 2018-04-18T15:45:45.833 回答