Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确设置cassandra事件存储表结构_Cassandra_Cql_Event Sourcing - Fatal编程技术网

如何正确设置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

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

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

如果这是分区的目标,那么您已经正确配置了主键。我唯一要补充的是这句话:

Id->每个事件的唯一GUID

如果您确实希望确保唯一性(如果聚合事件可能共享版本),我会在主键定义的末尾添加您的ID:

PRIMARY KEY (AggregateId, Version, Id)
两个后续问题:

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

2)
AggregateId
版本的比率是多少?您需要确保分区不会受到未绑定增长的影响,并且要注意Cassandra的每个分区20亿个单元的限制


但总的来说,您似乎走对了方向。

在Cassandra中,一切都取决于您计划对该表执行的查询。你能用查询的例子更新你的问题吗?