在cassandra中存储TB的统一时间序列

在cassandra中存储TB的统一时间序列,cassandra,storage,time-series,Cassandra,Storage,Time Series,我希望尽可能高效地存储大量的时间序列。速度很重要,但不如存储重要 我的数据包括股票名称,然后是15年的1分钟数据。 数据从2000年1月1日开始精确,每天的分钟数精确到390分钟 所以我不需要存储每个序列的时间戳,因为我可以自动计算。 因此,与此相反: Apple [timeStamp:value][timeStamp:value] 我想要这个: 苹果[价值][价值] 有没有办法在Cassandra中加载此类数据,使其只存储顺序值,而不存储每个值的时间戳 据推测,通过为每个系列使用时间戳,它将

我希望尽可能高效地存储大量的时间序列。速度很重要,但不如存储重要

我的数据包括股票名称,然后是15年的1分钟数据。 数据从2000年1月1日开始精确,每天的分钟数精确到390分钟

所以我不需要存储每个序列的时间戳,因为我可以自动计算。 因此,与此相反:

Apple [timeStamp:value][timeStamp:value]
我想要这个:

苹果[价值][价值]

有没有办法在Cassandra中加载此类数据,使其只存储顺序值,而不存储每个值的时间戳


据推测,通过为每个系列使用时间戳,它将使所需的存储量增加一倍:如果每个时间戳和值为8字节,则它将占用50 TB,而不是仅存储值时占用的25 TB。

Cassandra具有列表类型,最多可存储64K个元素。由于15年的时间超过了64K分钟,您需要一些辅助键来将其分解为64K或更小的组

假设您决定每天存储1440分钟,那么您可以这样定义该表:

CREATE TABLE stock_values_by_day (
  stock_name text,
  year int,
  day_number_within_year int,
  values list<int>,
  PRIMARY KEY (stock_name, year, day_number_within_year) );
因此,股票名称将是分区键,年份和天数将是集群列

然后在列表字段中存储每天1440个数据点。这样,您就不会在时间键上占用太多空间,而且您可以每天查询每只股票的数据,还可以在一年内进行多天的范围查询

如何细分取决于访问数据时所需的粒度级别,例如每天、每月等

另一种方法是将数据存储在blob字段中。在您的应用程序中,您需要将数据(比如一年的值)编码为二进制blob并以这种方式保存。当您读出它时,您必须将二进制blob扩展回原始值数组