直接从事件存储中读取或在读取端实现事件的副本

Read Directly from the Event Store Or Implement a Copy of the Events in the Read Side

我正在做一个项目,在这个项目中我实现了没有事件源的 CQRS。我将 Mongo 用于读取数据库和写入数据库。当必须更改某些内容时,首先在写入数据库中进行更改,然后同步读取数据库。

后来我介绍了类似 Event Store 的东西,也是一个 MongoDB 实例。我正在记录以某种方式改变其他数据库的所有事件。读取的数据库与事件存储不同步,所以我无法读取事件。

我遇到了这样一种情况,我需要来自事件存储的事件中的信息。我应该直接连接到事件存储并从那里读取,还是应该使读取数据库与事件存储同步并基本上保存事件存储的副本?

提前谢谢你们!如果有人需要这种信息,我正在使用 C# .NET Core。

您不应该直接从事件存储中读取事件没有任何功能上的原因。

读取模型的动机通常是低延迟查询;我们采用记录簿(事件流)中的数据表示形式,并将其重塑为可以回答查询的数据结构。我们接受最终一致性的后果以获得快速响应时间。

但是如果我们查询所需的形状是事件流,那么我们可以只使用源数据。

如果事件存储的查询对存储的写入有负面的性能影响,那么我们可能会重新设计系统以将查询定向到事件的缓存副本。