首页 文章

如何在Cassandra中为时间序列数据定义键空间?

提问于
浏览 1729
0

有100个数据点,每个数据点都有自己的独立表,其中包含架构和查询,如下所述:

SQLite中的当前架构

  • 表名称:数据点的名称,例如Tempearature

  • Column-1:Name:Timestamp Type:TEXT(yyyy-MM-dd HH:mm:ss.ttt format)PRIMARY KEY

  • Column-2:Name:Value Type:FLOAT

  • 第3栏:名称:质量类型:TEXT("GOOD","BAD")

查询SQLite

  • SELECT * FROM data-point-name;

  • SELECT * FROM data-point-name WHERE时间戳BETWEEN timesamp-1 AND timestamp-2;

  • INSERT INTO data-point-name(时间戳,值,质量)VALUES("2016-01-01 00:00:05.254",123.25454,"GOOD"); (这是一个例子)

目前我有SQLite数据库,其中每个数据点都有一个表,上面有模式,基本上我有100个表 . 这种方式读/写不会干扰在不同数据点上运行的查询 .

如何翻译这个模式在Cassandra中使用?

1 回答

  • 1

    在您的情况下,您可以将所有数据点存储在一个表中:

    CREATE TABLE datapoints (
        datatype varchar(30),
        time timestamp,
        value float,
        quality varchar(4),
        PRIMARY KEY (datatype, time)
    );
    

    使用此结构,您可以运行以下查询:

    SELECT * 
    FROM datapoints 
    WHERE datatype = 'data-point-name';
    
    SELECT * 
    FROM datapoints 
    WHERE datatype = 'data-point-name'
       AND time >= '2016-01-01 00:00:00' 
       AND time <= '2016-01-02 00:00:00';
    

    但是使用这种结构,cassandra将按数据点名称对数据进行分区,如果你有很多点,你的分区将是巨大的,你可以有查询性能问题 .

    您还可以通过分解时间来优化分区:

    CREATE TABLE datapoints (
       datatype varchar(30),
       year int,
       month int,
       day int,
       milisecondsinday int,
       value float,
       quality varchar(4),
       PRIMARY KEY ((datatype, year, month, day), milisecondsinday)
    ) WITH CLUSTERING ORDER BY (milisecondsinday ASC);
    

    在这种情况下,这个结构允许cassandra将数据存储在比第一个例子更小的分区中,如果你按天查询数据,它会更强大:

    SELECT *
    FROM datapoints
    WHERE datatype = 'data-point-type'
       AND year = 2016
       AND month = 1
       AND day = 1;
    

    获取'data-points-type'的所有积分 00:00 AM01:00 AM 之间的 2016-01-01

    SELECT *
    FROM datapoints
    WHERE datatype = 'data-point-type'
       AND year = 2016
       AND month = 1
       AND day = 1
       AND milisecondsinday >= 0
       AND milisecondsinday <= 3600000;
    

    当然,您可以按天(例如示例)或其他时间刻度(小时,分钟,秒和毫秒)进行分区 . 如果可以,小分区将有利于性能 .

    希望这可以帮到你 .

相关问题