我经常读到,CQRS 的一大优势是在读取端拥有非规范化数据。例如。可以存储冗余的数据字段和子对象以避免连接。但这也意味着单个事件可能会导致读取端发生多个更新操作,因为实体的状态更改必须反射(reflect)在多个读取端位置。
这是否意味着您需要读取端的原子事务支持? 许多 NoSQL 数据库仅支持一个集合或一个分区内的事务。
基于 CQRS 的系统如何在现实生活中处理这个问题?
- 他们在读取端使用 SQL 数据库吗?
- 他们仅使用非冗余数据吗?那么,为什么首先要有一个阅读商店呢?
- 是否有支持云端原子事务的高级数据库技术?
最佳答案
Doesn't that imply you need atomic transaction support on the read-side?
不,不一定,但您需要防止并发更新。
Do they use SQL databases on the read-side?
在我的最新项目中,我的大部分读取模型都使用 MongoDB。该数据库没有事务支持,但我不需要,因为我使用乐观锁定。我写了一篇文章here关于这一点,请使用 PHP 中的示例。我的想法是,我通过使用版本(作为唯一索引)来检测并发更新并重试最后一个。
Do they use non-redundant data only? Then, why having a read-store in the first place?
我使用完整的数据非规范化。这意味着我在一份文档中拥有特定 View 所需的所有信息。
关于azure - CQRS:读取端 ACID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46213938/