首页 > 解决方案 > 什么是时间序列数据基数?

问题描述

我见过很少有地方给出时间序列基数的定义,类似于:

假设您在 20 个位置有 1000 台 IoT 设备,它们运行 5 个固件版本之一,并报告每个设备来自 5 种传感器的输入。这组的基数是 500,000 (1000 x 20 x 5 x 5)。在某些情况下,这很快就会变得难以管理,因为即使为设备添加和跟踪新的固件版本也会将集合增加到 600,000 (1000 x 20 x 6 x 5)

https://questdb.io/blog/2021/06/16/high-cardinality-time-series-data-performance/#what-is-high-cardinality-data

或者

https://blog.timescale.com/blog/what-is-high-cardinality-how-do-time-series-databases-influxdb-timescaledb-compare/

我觉得这是非常夸张的定义。例如,如果您有一组 10 行,并且每行用于不同的设备,来自不同的位置、不同的固件、不同的传感器,它会将基数气球增加到 10x10x10x10 = 10,000。而且只有10行!

时间序列数据集基数能否超过数据集的总行数?

标签: time-seriestimescaledbquestdb

解决方案


在时间序列中,通常将时间序列的基数估计为唯一标签/标签值和测量次数的所有可能组合。该估计有助于了解在数据库的生命周期中,有多少不同的时间序列可能被存储在数据库中,即不仅仅是在当前状态。请注意,估计假设标签之间的独立性,通常不成立。InfluxDB 中系列基数的这个定义讨论了这个方面,除了问题中的链接之外,它也是一个有趣的阅读。

最好提前了解时间序列的可能基数,因为某些时间序列数据库不能很好地处理高基数。例如,请参阅这篇文章以处理 InfluxDB 中的高基数问题。

其他时间序列数据库,例如 TimescaleDB,在处理高基数方面没有任何问题,因为标签没有特殊处理。在创建索引时了解基数可能很有用,因为更高的基数使索引更有用,但占用更多空间。


推荐阅读