我一直在阅读事件溯源的相关内容,虽然我认为这是解决几个问题的自然方法,但我并没有完全理解如何在实践中存储这些事件。
通过在互联网上搜索,我找到了 Vaughn Vernon 写的this article,讲述了在 DDD 中存储聚合的简单方法。虽然它并不特别关注事件溯源,但他提出了一种使用 PostgreSQL 存储领域事件的方式。
在他的方法中,我们有一个名为“Events”的表,其中包含一个“id”和一个 JSON “data” 字段。这样做给了我们很大的自由度,因为我们可以存储任何 JSON 数据,因此我们可以存储各种各样的事件。
但是,将所有聚合对应的所有事件都存储在单个表中,让我有点担心。
那么,当我们存储事件以使用事件溯源时,应该如何进行?我能想到三个选项:
通过在互联网上搜索,我找到了 Vaughn Vernon 写的this article,讲述了在 DDD 中存储聚合的简单方法。虽然它并不特别关注事件溯源,但他提出了一种使用 PostgreSQL 存储领域事件的方式。
在他的方法中,我们有一个名为“Events”的表,其中包含一个“id”和一个 JSON “data” 字段。这样做给了我们很大的自由度,因为我们可以存储任何 JSON 数据,因此我们可以存储各种各样的事件。
但是,将所有聚合对应的所有事件都存储在单个表中,让我有点担心。
那么,当我们存储事件以使用事件溯源时,应该如何进行?我能想到三个选项:
采用领域事件的思路,将所有内容存储在单个表中。
为每个事件创建一个表。这里的缺点是我们需要跟踪每个聚合的事件,并且对于每个聚合可能会有各种各样的事件。因此,这很容易导致表数量庞大。
为每个聚合创建一个表,并将该聚合的所有事件存储在其中。虽然我们最终会得到不同类型的事件汇集在同一张表中,但它们都与同一聚合相关。
这三个选项中哪一个更合理?如果都不行,使用事件溯源时应该如何存储事件?