ENode是一個CQRS+Event Sourcing架構的開發框架,Event Sourcing須要持久化事件,事件能夠持久化在DB,可是DB因爲面向的是CRUD場景,是針對數據會不斷修改或刪除的場景,因此內部實現會比較複雜,性能也相對比較低。而Event Store實際上對數據只有新增和查詢的需求,因此我想爲Event Sourcing的場景針對性的實現一個Event Store。看了一下業界的一些實現,感受都沒有達到個人指望,因此想本身動手實現一個。下面是我構思的一個Event Store的單機版應該要具有的能力以及對應的設計方案,分享出來和你們討論。算法
{ "aggregateRootId": "", //聚合根ID "aggregateRootType": "", //聚合根類型 "eventVersion": "", //事件版本號 "eventTime": "", //事件發生時間 "eventData": "", //事件數據,JSON格式 "commandId": "", //產生該事件的命令ID "commandTime": "" //產生該事件的命令產生時間 }
{ "aggregateRootId": "", //聚合根ID "aggregateRootType": "", //聚合根類型 "eventVersion": "", //事件版本號 "eventTime": "", //事件發生時間 "eventData": "", //事件數據,JSON格式 "commandId": "", //產生該事件的命令ID "commandTime": "", //產生該事件的命令產生的事件 "previousEventPosition": ""//前一個事件在事件文件中的位置 }
{ "aggregateRootId": "", //聚合根ID "eventVersion": "", //事件版本號 "eventTime": "", //事件產生時間 "eventPosition": "", //事件在事件數據文件中的位置 }
{ "commandId": "", //聚合根ID "commandTime": "", //命令產生時間 "eventPosition": "", //事件在事件數據文件中的位置 }