2016-07-28 36 views
5

我一直在閱讀有關事件採購的信息,儘管我發現它對於幾個問題是一種非常自然的方法,但我並不十分了解如何在實踐中存儲事件。使用事件採購時存儲事件

在網上搜索一下我發現由Vaughn Vernon談論一種簡單的方法來存儲DDD中的聚合物。雖然它並不專門針對事件採購,但他的目的是使用PostgreSQL來存儲域事件

在他的方法中,我們有一個表Events,其中一個id和一個JSON data字段。這給了很大的自由度,因爲我們可以存儲任何JSON數據,因此我們可以存儲各種事件。

但有對應的所有所有聚集單個表中的事件,讓我有點擔心。

因此,當我們存儲事件以使用事件採購時,我們應該如何進行?我可以看到三種選擇:

  1. 遵循用於文章上的域事件的想法並將所有內容存儲在單個表中。

  2. 爲每個事件創建一個表。這裏的缺點是我們需要跟蹤每個聚合的事件,並且對於每個聚合可以有各種事件。所以這很容易導致一個巨大的表格編號。

  3. 爲每個聚合創建一個表並在那裏存儲該聚合的所有事件。儘管我們在同一個表中彙總了不同類型的事件,但它們都與相同的聚合有關。

這三個選項中哪一個更合理?如果沒有,在使用事件採購時存儲事件的正確方法是什麼?

回答

6

但是讓所有事件對應一個表中的所有聚集,這讓我有點擔心。

聽起來像FUD。

所有事件看起來都一樣,對不對?一組數據,以及一些元數據列,這些列可用於將Blob放置在上下文中。你沒有任何特別聰明的關係可以運行;查找流中的所有事件,查找由命令引起的所有事件(無論如何都將在同一個流中),就是這樣。

事件可能都屬於相同的邏輯視圖。

從身體上來說,你可能想四處逛逛,以便可以擴展。你可能想要回顧一下Udi Dahan在CQRS but differentslides中所說的話。但是這裏的基本思想是分片/ partitioning是數據庫供應商已經在解決的問題,所以讓他們這樣做。

的Postgres事件商店的討論: