如果我使用RDBMS(例如SQL Server)來存儲事件源數據,模式可能是什麼樣子?使用RDBMS作爲事件源代碼存儲
我已經看到抽象意義上談到的一些變體,但沒有具體的。例如,假設有一個「產品」實體,並且對該產品的更改可以採用以下形式:價格,成本和說明。我感到困惑是否我倒是:
- 有一個「ProductEvent」表中,有一個產品,每個變化意味着該表中的新記錄的所有字段,以及「誰,什麼,在哪裏,爲什麼,何時以及如何「酌情。當成本,價格或描述發生變化時,會添加一個新行來表示產品。
- 將產品成本,價格和描述存儲在通過外鍵關係連接到產品表的單獨表中。在對這些屬性進行更改時,根據需要使用WWWWWH編寫新行。
- 在「ProductEvent」表中存儲WWWWWH以及表示事件的序列化對象,這意味着事件本身必須在我的應用程序代碼中加載,反序列化並重新播放,以便重新構建應用程序狀態給定的產品。
特別是我擔心上面的選項2。極端而言,產品表幾乎是每個屬性一個表,在哪裏加載給定產品的應用程序狀態將需要從每個產品事件表加載該產品的所有事件。這張桌子爆炸對我來說是錯誤的。
我確定「這取決於」,雖然沒有任何單一的「正確答案」,但我試圖理解什麼是可以接受的,什麼是完全不可接受的。我也知道NoSQL在這裏可以提供幫助,在這裏可以根據聚合根存儲事件,這意味着只有對數據庫的單個請求來獲取事件來重建對象,但是我們沒有使用NoSQL db這一刻,我感覺周圍的替代品。
以其最簡單的形式:[Event] {AggregateId,AggregateVersion,EventPayload}。不需要聚合類型,但可以選擇存儲它。不需要事件類型,但可以選擇存儲它。這是發生事情的一長串清單,其他任何事情都只是優化。 –
絕對遠離#1和#2。將所有內容序列化爲一個blob並將其存儲。 –