不收定金的黑客联系方式哪里有?要靠谱的黑客联系方式

ENode是一个CQRS+Event Sourcing架构的开发框架,Event Sourcing需要持久化事件,事件可以持久化在DB,但是DB由于面向的是CRUD场景,是针对数据会不断修改或删除的场景,所以内部实现会比较复杂,性能也相对比较低。而Event Store实际上对数

ENode是一个CQRS+Event Sourcing架构的开发框架,Event Sourcing需要持久化事件,事件可以持久化在DB,但是DB由于面向的是CRUD场景,是针对数据会不断修改或删除的场景,所以内部实现会比较复杂,性能也相对比较低。而Event Store实际上对数据只有新增和查询的需求,所以我想为Event Sourcing的场景针对性的实现一个Event Store。看了一下业界的一些实现,感觉都没有达到我的期望,所以想自己动手实现一个。下面是我构思的一个Event Store的单机版应该要具备的能力以及对应的设计方案,分享出来和大家讨论。

一、需求概述

•存储聚合根的事件数据
•支持事件的版本并发控制,新事件的版本号必须是当前版本号+1
•支持命令重复判断,即不可以处理重复命令产生的事件
•支持按聚合根ID查询该聚合根的所有事件
•支持按聚合根ID+事件版本号查询指定的事件
•支持按命令ID查询该命令对应的事件数据
•高性能,写入要尽量快,查询要尽量快

二、事件数据格式

1
2
3
4
5
6
7
8
9
{
aggregateRootId: , //聚合根ID
aggregateRootType: , //聚合根类型
eventVersion: , //事件版本号
eventTime: , //事件发生时间
eventData: , //事件数据,JSON格式
commandId: , //产生该事件的命令ID
commandTime: //产生该事件的命令产生时间
}

三、存储设计

1、核心内存存储设计

•遵循内存只存储索引数据的原则,尽量充分利用内存;
•aggregateLatestVersionDict,存储每个聚合根的最大事件版本号 ◦key:aggregateRootId,聚合根ID
◦value: ◦eventVersion,当前聚合根的最新事件的版本号,也即当前聚合根的版本号
◦eventTime,事件产生时间
◦eventPosition,事件在事件数据文件中的位置

•commandIdDict,存储命令索引 ◦key:commandId,命令ID
◦value: ◦commandTime,命令产生时间
◦eventPosition,命令对应的事件在事件数据文件中的位置

2、物理存储的数据

•事件数据:eventData,单条数据的结构:

1
2
3
4
5
6
7
8
9
10
{
aggregateRootId: , //聚合根ID
aggregateRootType: , //聚合根类型
eventVersion: , //事件版本号
eventTime: , //事件发生时间
eventData: , //事件数据,JSON格式
commandId: , //产生该事件的命令ID
commandTime: , //产生该事件的命令产生的事件
previousEventPosition: //前一个事件在事件文件中的位置
}

•事件索引:eventIndex,单条数据的结构:

1
2
3
4
5
6
{
aggregateRootId: , //聚合根ID
eventVersion: , //事件版本号
eventTime: , //事件产生时间
eventPosition: , //事件在事件数据文件中的位置
}

•命令索引:commandIndex,存储内容:存储所有命令的ID及其对应的事件所在文件的位置

1
2
3
4
5
{
commandId: , //聚合根ID
commandTime: , //命令产生时间
eventPosition: , //事件在事件数据文件中的位置


  • 发表于 2021-02-09 08:27
  • 阅读 ( 188 )
  • 分类:互联网

0 条评论

请先 登录 后评论
紫金信息科技
紫金信息科技

669 篇文章

你可能感兴趣的文章

相关问题