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

p5fdfcr1  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(284)

我是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分区,其中包含按版本排序的此聚合的所有事件。

mu0hgdu0

mu0hgdu01#

按aggregateid分区,其中包含按版本排序的此聚合的所有事件。
如果这是分区的目标,那么您已经正确配置了主键。我要说的唯一一句话是:
id->每个事件的唯一guid
如果您真的想确保唯一性(如果聚合事件可能共享版本),我会在主键定义的末尾添加您的id:

PRIMARY KEY (AggregateId, Version, Id)

两个后续问题:
1) 您预期的查询模式是什么?如果你一直 AggregateId 和/或 Version 在你的 WHERE 你应该没事的。否则,您可能需要重新考虑pk定义。
2) 这个比例是多少 AggregateId : Version ? 您需要确保分区不会受到未绑定增长的影响,并且要注意cassandra的每个分区20亿个单元的限制。
但总的来说,看起来你走对了方向。

相关问题