如何正确设置cassandra事件存储表结构
我是Cassandra数据库的初学者。我准备了事件存储表的示例,如下所示:如何正确设置cassandra事件存储表结构,cassandra,cql,event-sourcing,Cassandra,Cql,Event Sourcing,我是Cassandra数据库的初学者。我准备了事件存储表的示例,如下所示: CREATE TABLE IF NOT EXISTS eventstore.Event( Id uuid, Data text, Version int, Aggr
CREATE TABLE IF NOT EXISTS eventstore.Event(
Id uuid,
Data text,
Version int,
AggregateId uuid,
EventIdentity uuid,
Date timestamp,
PRIMARY KEY (AggregateId, Version)
) WITH CLUSTERING ORDER BY (Version ASC)
其中:
Id->每个事件的唯一GUID
数据->JSON事件数据
版本->事件版本的int值
AggregateId->命名,聚合Id
EventIdentity->事件类型的Id
事件发生时的日期->时间戳
我不确定我的主键是否正确(AggregateId,Version),也不确定是否按版本进行集群。我想知道我的桌子是否分区正确。按AggregateId分区,其中包含按版本排序的此聚合的所有事件
按AggregateId分区,其中包含按版本排序的此聚合的所有事件
如果这是分区的目标,那么您已经正确配置了主键。我唯一要补充的是这句话:
Id->每个事件的唯一GUID
如果您确实希望确保唯一性(如果聚合事件可能共享版本),我会在主键定义的末尾添加您的ID:
PRIMARY KEY (AggregateId, Version, Id)
两个后续问题:
1) 您预期的查询模式是什么?如果在WHERE
子句中始终有AggregateId
和/或Version
,则应该没有问题。如果没有,您可能需要重新考虑PK定义
2) AggregateId
:版本的比率是多少?您需要确保分区不会受到未绑定增长的影响,并且要注意Cassandra的每个分区20亿个单元的限制
但总的来说,您似乎走对了方向。在Cassandra中,一切都取决于您计划对该表执行的查询。你能用查询的例子更新你的问题吗?