我正忙于一个没有事件采购实施CQRS的项目。我使用Mongo作为读取数据库以及写入数据库。当必须更改某些内容时,首先在write db中更改它,然后读取db进行同步。
后来我引入了像Event Store这样的东西,也是一个MongoDB实例。我正在编写以某种方式改变其他数据库的所有事件的历史记录。读取数据库不与事件存储同步,因此我无法读取事件。
我遇到了需要来自Event Store的事件内部信息的情况。我应该直接连接到事件存储并从那里读取,或者我应该使读取数据库与事件存储同步并基本上保留事件存储的副本?
先谢谢你们!如果有人需要这种信息,我正在使用C#.NET Core。
答案 0 :(得分:3)
没有功能上的原因,您不应该直接从事件存储中读取事件。
阅读模型的动机通常是低延迟查询;我们采用记录簿(事件流)中的数据表示,并将其重塑为可以回答查询的数据结构。我们接受最终一致性的后果,以获得快速响应时间。
但是如果我们查询所需的形状是一个事件流,那么我们就可以使用源数据了。
如果事件存储的查询对存储的写入产生负面的性能影响,那么我们可能会重新设计系统以将查询定向到事件的缓存副本。