CQRS事件存储的结构

Gol*_*den 13 cqrs event-store

我目前正在尝试了解如何构建事件存储的内部结构.到目前为止我得到了什么:

  • 事件存储有两个表(集合,...),一个用于聚合,一个用于事件.
  • 聚合表包含以下数据:( aggregateId可能是GUID)和aggregateVersion(这是一个整数,它只表示影响此聚合的最后一个事件的编号).
  • 事件表包含以下数据:( eventId同样,GUID),aggregateId(事件所属)payload,和a version(它只是描述事件顺序的整数).

到目前为止这是正确的吗?应该使用整数来排序事件吗?或者他们应该根据时间戳订购?每个有什么好处?有什么缺点?

Mik*_*erg 10

我建议你看看Jonathan Oliver的EventStore作为参考.

在SQL持久性版本中,只有一个表.您可以轻松地在没有聚合表的情况下生存,并将aggregateId存储在事件表中.可以使用max()查询检索最新版本.

除此之外,我认为你应该考虑在事件表中使用标题,因为总是有一些有趣的元数据你不想存储在事件本身中.

而且,我认为你应该在事件表中添加一个日期列.

最后,您可能希望获得某种标志,指出事件是否已下游调度.此添加使您可以在一个线程或进程中编写,并在另一个线程或进程中进行分派

Aaand在那里,我有点建议Jonathans EventStore的结构.

  • 抛弃派出的旗帜.预测/观点可以负责跟踪他们的进度.这也允许您写入仅附加存储以及简化备份和复制. (2认同)