我被要求在事件源中进行一些探索。我的目标是创建一个满足所有传统CRUD操作的小API层。我现在正在使用一个名为'sourced'的包,并尝试使用它(使用Nodejs)。如何管理事件源应用程序中的读取请求
但是,当我单独使用时,我意识到事件源并不是很有用。通常,它与CQRS耦合。
我对CQRS的理解是,当UI向服务器发送写命令时。该应用程序对数据做了一些验证。并保存在事件存储(我用的MongoDB),例如:这里是我的事件存储应该是什么样子:
{method:"createAccount",name:"user1", account:1}
{method:"deposit",name:"user1",account: 1 , amount:100}
{method:"deposit",name:"user1",account: 1 , amount:100}
{method:"deposit",name:"user1",account: 1 , amount:100}
{method:"withdraw",name:"user1",account1,amount:250}
它包含了所有审计信息,而不是最终的状态。然而,我很困惑我该如何处理读取操作。如果我想读取帐户的余额,该怎么办?究竟会发生什么? 这里是我的问题:
- 如果我们不能直接查询事件存储(数据库)用于读取操作,那么我们应该从哪里查询?它应该是内存中的缓存吗?
- 如果我们查询内存。是已经存在的最终状态,或者我必须执行重放(或左侧)操作来计算结果。例如,帐户1的余额为50.
- 我发现一些博客讨论了'订阅'或'广播'。他们是什么,并向谁播放?
如果我的理解错误,我会非常感谢您的任何建议,并请告诉我。
对我来说,你不会在你的问题中表达意识的一个概念是事件通常在流中维护,这是按照DDD意义上的每个聚合分离的。在决策过程中考虑的事件序列仅限于您在写作时所处理的事件。在查询方面,您可以在某些低负载情况下通过阅读+折叠整个流来破解它。一般来说,正如答案所暗示的那样,预测是如何实现查询的等价物。 [GES介绍文档](http://docs.geteventstore.com/introduction/4.0.2/event-sourcing-basics/)是一个很好的阅读 –
@RubenBartelink是的你是对的!我不知道如何使用事件流。我应该看看流维护的东西。感谢您的建议! – nick