如果我使用的是RDBMS(例如SQL Server)来存储事件源数据,那么架构会是什么样?
我已经看到一些抽象意义上的变体,但是没有具体的意义。
例如,假设某人拥有一个“产品”实体,那么对该产品的更改可以采用以下形式:价格,成本和说明。我对是否愿意感到困惑:
- 有一个“ ProductEvent”表,其中包含产品的所有字段,每个更改都意味着该表中有一条新记录,并在适当时加上“谁,什么,什么地方,为什么,何时和如何”(WWWWWH)。更改成本,价格或说明时,会添加一个全新的行来表示产品。
- 将产品成本,价格和说明存储在具有外键关系的连接到产品表的单独表中。更改这些属性后,请根据需要使用WWWWWH写入新行。
- 将WWWWWH以及代表事件的序列化对象存储在“ ProductEvent”表中,这意味着必须在应用程序代码中加载,反序列化和重播事件本身,以便为给定产品重新构建应用程序状态。
我特别担心上面的选项2。更极端的是,产品表几乎是每个属性一个表,要加载给定产品的应用程序状态将需要从每个产品事件表中加载该产品的所有事件。这种桌子爆炸对我来说是不对的。
我确定“取决于”,虽然没有一个“正确答案”,但我试图让人们了解什么是可以接受的,什么是完全不可接受的。我也知道NoSQL可以在这里提供帮助,因为事件可以针对聚合根存储,这意味着仅向数据库发出单个请求即可获取事件以从中重建对象,但是我们在数据库上并未使用NoSQL db。片刻,所以我在寻找替代品。