我是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
事件标识->事件类型的id
日期->事件发生时的时间戳
我不确定我的主键是否正确(aggregateid,version)以及是否按版本进行集群。我想知道我的table是否分区正确。按aggregateid分区,其中包含按版本排序的此聚合的所有事件。
1条答案
按热度按时间mu0hgdu01#
按aggregateid分区,其中包含按版本排序的此聚合的所有事件。
如果这是分区的目标,那么您已经正确配置了主键。我要说的唯一一句话是:
id->每个事件的唯一guid
如果您真的想确保唯一性(如果聚合事件可能共享版本),我会在主键定义的末尾添加您的id:
两个后续问题:
1) 您预期的查询模式是什么?如果你一直
AggregateId
和/或Version
在你的WHERE
你应该没事的。否则,您可能需要重新考虑pk定义。2) 这个比例是多少
AggregateId
:Version
? 您需要确保分区不会受到未绑定增长的影响,并且要注意cassandra的每个分区20亿个单元的限制。但总的来说,看起来你走对了方向。