混合数据时间序列的Cassandra模式

时间:2018-07-11 20:45:12

标签: database-design cassandra cql

我是Cassandra的新手,正在尝试创建用于存储和查询混合/异构数据的时间序列的架构。我对如何建模时间戳和混合数据有疑问。

我的问题可以这样抽象:

  • 我已部署了大约1亿个传感器吊舱。
  • 每个吊舱包含不同的传感器组合,其中每个传感器都生成doublestring读数。
  • 吊舱每天都会生成其传感器读数列表(例如sensor1,sensor2,sensor5)。

对于每个传感器盒,我想将其传感器的读数存储一天。所以我打算存储这样的数据:

  1. podID:窗格的唯一ID
  2. dt:代表一整天,例如2018年7月10日
  3. num_data:存储数字传感器读数的地图,例如{“ sensor1”:-123,“ sensor3”:123}
  4. str_data:存储字符串传感器读数的地图,例如{“ sensor2”:“ foo”,“ sensor5”:“ bar”}

问题1 :存储日期的最佳方法是什么?我在网上搜索,发现了多种方法。

first way is use a timestamp as the clustering key

CREATE TABLE time_series (
    podID     text,
    dt        timestamp,
    num_data  map<text, double>,
    str_data  map<text, double>,
    PRIMARY KEY (podID, dt)
);

second way I've found is to store the date as individual integers for year, month, and day

CREATE TABLE time_series (
    podID     text,
    year      int,
    month     int,
    day       int,
    num_data  map<text, double>,
    str_data  map<text, double>,
    PRIMARY KEY (podID, (year, month, day))
);

一个third way puts a part of the timestamp into the partition key

PRIMARY KEY ((podID, month), dt))

我该如何选择走哪条路?

问题2 :使用map<>数据结构是存储混合/变化/异构类型数据的最佳方法吗?

0 个答案:

没有答案