选择 NoSQL 数据库以在 CQRS 设计的应用程序中存储事件

Yon*_*eau 5 domain-driven-design consistency nosql cqrs

我正在寻找关于如何选择 NoSQL 数据库引擎以在 CQRS 设计的应用程序中存储所有事件的良好、最新和“决策帮助”解释。

我目前是 NoSQL(但正在学习)所有事物的新手:请清楚并毫不犹豫地以(几乎太多)精确的方式解释您的观点。这篇文章可能值得像我这样的新人。

该数据库将:

  • 能够为前视图要求的每次更新插入 2 到 10 行(在我的情况下,更新很频繁)。想想每分钟数千次更新,它会如何扩展?

  • 非常需要一致性和故障安全性,因为事件是应用程序的真实来源。

  • 除了用户 ID/GUID 之外,不需要实体之间的任何链接(就像 RDBMS 那样)(我不知道它是关键还是需要)

  • 接收包含 3 到 10 个“列”(序列 ID、事件名称、日期时间、JSON/二进制编码的参数包、一些上下文信息..)的事件。如果没有在面向列类型的数据库中定位您的观点,如果它符合所有其他要求,则它可能是面向文档的

  • 用作队列或发送到外部 AMQP 系统(如 RabbitMQ 或 ZeroMQ)或从外部 AMQP 系统读取(还没有处理那部分,如果您还可以论证/解释..),因为视图投影将建立在事件上

  • 需要按序列 IDSELECT * FROM events WHERE sequence_id > last_sequence_id进行某种过滤,例如订阅者(或队列系统)才能从给定点进行同步

我听说过用于 CQRS 事件存储的 HBase,但也许 MongoDB 适合?或者甚至是 Elasticsearch(不会赌那个..)?为了一致性和可用性,我也对 RDBMS 持开放态度.. 但是分区容错部分呢..?

真的我迷路了,我需要争论来做出相关的选择。

Cha*_*les 5

https://geteventstore.com/是专门为事件流设计的数据库。

他们非常重视事实来源(您的事件)的一致性和可靠性,我自己用它每秒读/写数千个事件。