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

Database design 混合数据时间序列的Cassandra模式,database-design,cassandra,cql,Database Design,Cassandra,Cql,我是Cassandra的新手,正在尝试创建一个用于存储和查询混合/异构数据时间序列的模式。我对如何对时间戳和混合数据建模有疑问 我的问题可以这样抽象: 我部署了大约1亿个传感器吊舱 每个pod包含不同的传感器组合,其中每个传感器生成双读数或字符串读数 pod每天生成传感器读数列表(例如传感器1、传感器2、传感器5) 对于每个传感器吊舱,我想将其传感器读数存储一天。因此,我计划像这样存储数据: podID:pod的唯一ID dt:表示一整天,如2018年7月10日 num_data:存储数字传

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

我的问题可以这样抽象:

  • 我部署了大约1亿个传感器吊舱
  • 每个pod包含不同的传感器组合,其中每个传感器生成
    双读数
    字符串
    读数
  • pod每天生成传感器读数列表(例如传感器1、传感器2、传感器5)
对于每个传感器吊舱,我想将其传感器读数存储一天。因此,我计划像这样存储数据:

  • podID:pod的唯一ID
  • dt:表示一整天,如2018年7月10日
  • num_data:存储数字传感器读数的映射,例如{“sensor1”:-123,“sensor3”:123}
  • stru数据:存储字符串传感器读数的映射,例如{“sensor2”:“foo”,“sensor5”:“bar”}
  • 问题1:存储日期的最佳方式是什么?我在网上搜索,找到了多种方法

    委员会:

    我如何选择走哪条路


    问题2:我使用
    map
    数据结构是否是存储混合/变化/异构类型数据的最佳方式

    一,。您的主键应该取决于您需要执行的所有查询(特别是where子句?)和您期望的结果(您需要什么类型的排序),记住您没有宽行。2.是的,您可以映射以保持混合数据(例如json)如果pod在一个月内生成的数据超过~100 mb,那么您的第三个选项也会导致宽行。因此,您可能需要每周对数据进行分区。另一方面,如果pod在整个生命周期内只生成很少mb的数据,您的第一个选项也可以,您可以根据pod id查询数据并按时间顺序排序。
    CREATE TABLE time_series (
        podID     text,
        dt        timestamp,
        num_data  map<text, double>,
        str_data  map<text, double>,
        PRIMARY KEY (podID, dt)
    );
    
    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))
    );
    
    PRIMARY KEY ((podID, month), dt))