我想尝试在事件源应用程序中使用 Cassandra 作为事件存储。我对活动商店的要求非常简单。事件“模式”将是这样的:
- id:聚合根实体的 id
- data : 序列化的事件数据(例如 JSON)
- 时间戳:事件发生的时间
- sequence_number:事件的唯一版本
我对 Cassandra 完全陌生,所以请原谅我对即将写的内容一无所知。我只有两个想要在这些数据上运行的查询。
- 给我给定聚合根 ID 的所有事件
- 如果序列号 > x,给我给定聚合根的所有事件
我的想法是在 CQL 中创建一个 Cassandra 表,如下所示:
CREATE TABLE events (
id uuid,
seq_num int,
data text,
timestamp timestamp,
PRIMARY KEY (id, seq_num) );
这似乎是对问题建模的明智方法吗?而且,重要的是,使用复合主键是否可以让我有效地执行我指定的查询?请记住,在给定用例的情况下,同一聚合根 ID 可能存在大量事件(具有不同的 seq_num)。
我特别担心的是第二个查询在某种程度上会效率低下(我在这里考虑二级索引......)