时间序列的最佳 Cassandra 模式

Optimal Cassandra Schema for Time-Series

所以我将用户事件存储在 Cassandra 中,并正在寻找 table 的正确键控。

CREATE TABLE user_events ( user text, timestamp timestamp, ip text, event text, content text, service text, PRIMARY KEY (user, timestamp) ) WITH CLUSTERING ORDER BY (timestamp DESC) AND compaction = { 'class' : 'DateTieredCompactionStrategy' };

我知道单个分区有限制(我认为是 ~1B )。我不打算随着数据变旧而删除数据。我还需要按月或其他方式输入吗?例如:

PRIMARY KEY((user, month) timestamp)

或者如果有更优化的方式或存储时间序列数据的事件。

不要使用 DateTiered,使用 TimeWindow。其次,您应该按照预期的方式编写(例如:列出您想要的所有 SELECT 查询,然后在其之后建模)。但要避免大分区。

如果您想根据时间查找用户事件,有几种方法可以避免大分区。

  1. 按照你说的按日期键入。
  2. 不同时间在不同 table 秒内的不同事件(例如:每月一个 table)

第二种方式的优点是可以隔离数据,让您可以move/store/change随时进行设置,而不是将来如果需要更改某些内容,就必须处理海量数据集。此外,如果您打算在将来删除(比方说,GDPR),您可以在删除完整的 table 时避免逻辑删除。