azure - CQRS:读取端 ACID

标签 azure transactions cqrs consistency

我经常读到,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/

相关文章:

postgresql - Postgres 事务似乎无缘无故采用 AccessExclusiveLock

mysql - 当两个事务同时保存数据时,Hibernate 集合数据丢失

cqrs - 将事件附加到 eventstore

architecture - 从 CQRS 写入端数据库读取数据

azure - 在单个订阅部署中使用 federatedIdentityCredentials 在 Azure 中部署 AKS

sql-server - 有关 Azure SQL 数据仓库的 SQL Server 存储过程性能调整的建议

Azure Active Directory 并发用户(相同凭据)登录

Azure功能门户: "Code + Test" section can update code,但更改未生效

file-io - 在非事务性文件系统中实现原子文件写入

bdd - 有没有人使用 SpecFlow/StoryQ 用 CQRS 完成 BDD