CQRS事件存储的结构

时间:2012-09-21 12:07:40

标签: cqrs event-store

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

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

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

4 个答案:

答案 0 :(得分:10)

我建议您查看Jonathan Oliver's EventStore以供参考。

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

除此之外,我认为你应该考虑在事件表中设置标题,因为总有一些有趣的元数据你不想存储在事件中。

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

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

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

答案 1 :(得分:4)

答案 2 :(得分:4)

我不能为Mikael的回答增加太多。

这里还有一件事作为参考:几年前,Greg Young写下了他对事件存储实现的看法。该文件可在http://cqrs.wordpress.com/documents/building-event-storage/

找到

虽然我相信他的方法也同时发展了。

答案 3 :(得分:2)

聚合与cqrs有关,但不直接与事件存储有关。 你有两个集合,但这些是事件和快照。 有关详细信息,请查看: https://github.com/jamuhl/nodeEventStore