如何解决CQRS 与 EventSourcing 如何优化读/写
据我所知,CQRS 和 ES 可以帮助我们独立优化读写操作。当使用分离的数据库进行读/写时,我们可以在读取数据库中设置适当的索引,这样读取就可以高效,并且我们可以以最终一致性为代价将数据快速保存到事件存储中。
这是我的问题:如果两个数据库中的数据需要同步,那么写入读取数据库会导致重建索引,因此它会阻止我们的读取。
我的印象是它与独立读/写的想法相冲突。将数据快速保存到事件存储有什么好处,最终保存到读取数据库的时间更长,所以我们并没有真正独立地扩展 r/w 操作。也许我遗漏了一些东西,我仍在学习这些模式。
附注。英语是我的第二语言,如有任何错误,我很抱歉。
解决方法
我不确定您的问题到底是什么,但我会尽量在此处阐述我的看法。
如果用于读/写的数据库是完全分开的,它们根据定义不会相互影响。以这种方式使用 CQRS 意味着我们可以独立扩展读/写操作。
然而,更新传播到读取模型并可供客户端查询之前可能需要一些时间。这是您为设计一个最终一致的分布式系统而支付的成本。
写模型和读模型之间的同步机制可能因实现而异。但是,在分布式 CQRS 系统中,读取模型最终与写入模型在设计上保持一致,因此它们并非始终同步。读取模型总是在追赶,有时它会拥有所有信息。
希望能回答您的问题。
,根据我使用 CQRS 的经验,它可以让您灵活地使用多种技术和技术来提高性能 - 根据您的要求。
示例:
- 对于 CQRS 的命令部分,您可以使用高级 ORM,例如 EF Core,
- 对于查询部分,您可以使用像 Dapper(更快)或 ADO.NET(甚至更快)这样的 Micro ORM。
另一个关于如何设计数据库的例子:
- 您为命令事务设计了一个数据库(标准化)
- 另一个用于查询的同步数据库(非规范化)在查询方面提供了更好的性能。
您还有很多关于如何在数据库之间同步的选择
所以您可以灵活地提高性能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。