如何正确设置cassandra事件存储表结构

问题描述 投票:2回答:1

我是Cassandra数据库的初学者。我准备了事件存储表的示例,该示例如下所示:

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进行分区,该分区包含此聚合的所有事件(按版本排序)。

cassandra cql event-sourcing
1个回答
0
投票

按AggregateId划分的分区,其中包含此聚合按版本排序的所有事件。

如果这是您分区的目标,那么您已经正确配置了PRIMARY KEY。我唯一要添加的就是围绕此语句:

Id->每个事件的唯一GUID

如果您真的想确保唯一性(并且聚合事件可以共享版本,则可以在PRIMARY KEY定义的末尾添加您的ID:

PRIMARY KEY (AggregateId, Version, Id)

两个后续问题:

1)您期望的查询模式是什么?如果在AggregateId子句中始终有Version和/或WHERE,那应该没问题。如果没有,您可能需要重新考虑PK定义。

2)AggregateIdVersion的比率是多少?您需要确保分区不受无限增长的限制,并要注意Cassandra的20亿个每个分区的限制。

但是总的来说,您似乎在正确的轨道上。

© www.soinside.com 2019 - 2024. All rights reserved.