时间序列

时间:2018-06-11 12:14:40

标签: database-design cassandra time-series cql

所以我在Cassandra中存储用户事件,并且正在为表格寻找正确的密钥。

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)

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

1 个答案:

答案 0 :(得分:1)

不要使用DateTiered,请使用TimeWindow。其次你应该按照你期望的内容进行编写(例如:列出你想要的所有SELECT查询,然后在那之后建模)。但是要避免大分区。

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

  1. 按照你所说的日期关键。
  2. 在不同的表格中分隔不同时间的事件(例如:每月一张表格)
  3. 第二种方式具有隔离数据的优势,允许您随意移动/存储/更改设置,而不是在将来如果您需要更改某些内容,则必须处理大量数据集。此外,如果您计划在将来删除(比方说,GDPR),则可以在删除完整表格时避免使用逻辑删除。