数据库存储事件并显示这些事件的最终结果的想法对现实世界(以及实际发生的事情)来说是现实的。
鉴于事件溯源数据库提供的灵活性(例如,在不同时间点查看数据库),为什么此类数据库不流行?
例如,我所知道的唯一两个进行事件溯源的数据库是 Datomic 和 Event Store。
可以说,几乎每个 SQL(和许多非 SQL)产品使用的预写日志是一个事件流,允许在实例故障时重建对象(表)。当然,它们中的大多数是不适合应用程序查询的不透明二进制格式。
为此,ANSI 标准现在定义了 SQL 的时间特征。这记录了特定值有效的时间间隔。重新创建历史是在谓词中包含“截至”日期时间值的问题。有些产品专门用于高效地批量存储时间序列数据。
所有更改的最终结果正是每个表/文档/列存储为应用程序提供的内容。
回答实际问题 - CQRS 商店提供的结果大多可从其他更知名和受支持的产品中获得。采用一种的商业风险可能超过功能优势,因此产品并不普及。
CQRS 既可以被视为一种产品,也可以被视为一种设计模式。因此,任何主流商店都可以实现 CQRS。
会计、银行和金融系统一般会存储关于每笔交易的完整信息,即每一次状态变化。想想你的银行对账单 - 它有一个完整的清单,列出了报告期内发生的所有贷方和借方。您的银行可能会使用关系数据库来实现这一点。我知道 Xero 使用 SQL Server。复式簿记(会计对你和我)的原则是,没有交易(即“事件”)的账户不会发生任何变化,并且每笔交易一旦被记录,就是不可变的。