首页 文章

时间序列数据的Cassandra数据模型

提问于
浏览
1

为了监视某些分布式软件,我将其监视数据插入到Cassandra表中 . 列是 metric_typemetric_valuehost_namecomponent_typetime_stamp . 方案是我每秒收集所有节点的所有指标 . 所有节点及其指标的统一时间 . 键(区分行)是 host_namecomponent_typemetric_typetime_stamp . 我设计我的表如下:

CREATE TABLE metrics (
    component_type text,
    host_name text,
    metric_type text,
    time_stamp bigint,
    metric_value text,
    PRIMARY KEY ((component_type, host_name, metric_type), general_timestamp)
) WITH CLUSTERING ORDER BY (time_stamp DESC)

其中 component_typehost_namemetric_type 是分区键, time_stamp 是群集键 . metrics 表适用于根据时间戳为 host_namemetric_typecomponent_type 获取某些数据的查询,因为使用分区键Cassandra将找到存储数据的分区,并使用群集密钥从该分区获取数据这是Cassandra查询的最佳案例 .

除此之外,我需要一个只使用 time_stamp 获取所有数据的查询 . 例如 :

SELECT * from metrics WHERE time_stamp >= 1529632009872 and time_stamp < 1539632009872 ;

我知道 metric 表不适合上述查询,因为它应搜索每个分区以获取数据 . 我想在这种情况下我们应该使用 time_stamp 作为分区键设计另一个表,因此将从一个或一些有限数量的分区中提取数据 . 但我不确定某些方面:

  • time_stamp 设置为分区键是否最佳?因为我每秒都会将数据插入数据库,而且分区键号也会很多!

  • 我需要查询 time_stamp 上的间隔,我知道分区键中不允许间隔条件,只允许在群集键上使用!

那么这种时间序列数据和查询的最佳Cassandra数据模型是什么?

1 回答

  • 0

    在我看来,使用 time_stamp 作为分区键并不是最佳选择,因为它会创建大量分区 .

    我建议2个解决方案:

    1)以“week_first_day”作为分区键 . 您必须在应用程序端计算正确的week_first_day键,然后发出多个选择查询 .

    2)你可以在cassandra上使用ElasticSearch . Cassandra仍然是主要的数据源,但您可以自由地进行复杂的选择 . 如果您有兴趣,我建议您去看看Elassandra .

相关问题