CQRS 为什么不只对读和写使用 elasticsearch?

CQRS why not just have elasticsearch for both read and write?

我正在考虑为我的项目使用 CQRS 架构。这意味着有一个读写数据库和一个更新过程来保持两个数据库同步。

因为我无论如何都要在每个命令后更新读取(elasticsearch)数据库,所以我想知道:拥有一个写入数据库有什么用?

分离的目的是在多个数据库之间分配负载。将一个写入优化数据库用于写入操作,并将读取优化数据库作为异步更新。所以这样,写入负载不会影响读取数据库。我们可以独立地扩展它们。

另一个原因是读写模式可能不同。你可以有一个博客网站,在主页上列出最近的博客,你需要写所有的数据来写数据库,但你只需要一些数据来列出或索引它。因此,在基础架构级别使用 CQRS 为我们提供了数据库的独立可扩展性。

我知道这个话题已经有 3 年多了,但我想告诉我 2 美分,对于同样的问题,我用 Cassandra 开发了一个事件源 Akka 有限状态机来处理 Command/Write CQRS 的一侧.

如前所述,我同意写入端模型和读取端模型不必相同,在我的状态机中有超过 30 个状态,但其中只有 5 个只对读取感兴趣边.

如果有人想看看它是如何完成的,我写了一篇关于它的博客Akka Finite State Machine with Cassandra/Elasticseach for CQRS