全部产品
云市场

预处理概念

更新时间:2019-06-29 05:33:19

TSDB旨在对时序数据进行高效管理,其设计遵循在线数据库的基本原则: 只要数据成功写入, 立即可以进行时序查询. 一般情况下, TSDB对外暴露的相关功能并不会对原始数据做语义与准确性上的变更.

这种设计下, 随着数据量的膨胀, 相关问题也会呈现:

  • 历史数据/冷数据: TSDB对大跨度时间范围或许多标签组合的查询都会非常痛苦, 此类查询可能需要很长时间才能完成,或者在最坏的情况下,会因资源不足而终止查询。
  • 复杂查询: 某些非常消耗计算资源的查询, 执行在线查询时会造成整体实例的查询响应时间(RT)不稳定, 影响其他查询的性能.

针对上面几个问题, 参考经典OLAP体系的设计思想, TSDB引入时序预处理能力来提供解决方案, 与MOLAP类似, 时序预处理允许从多维度(时间粒度,业务制定)进行复杂计算的实时流式处理,并且将流式处理结果与TSDB自身的查询机制无缝结合. 保证TSDB在海量数据下,依然保证时序查询的响应时间(RT)做到秒级处理.

时序预处理整体来说, 预处理分为时间线计算与时序分析两部分, 前者与TSDB内部的查询流程集成, 后者面向于基于规则的业务计算表达.

时间线计算

时序数据预降采样(Rollup)

在时序预处理中,“Rollup” 被定义为随时间聚合的单时间线数据。也可以称为 “基于时间粒度的聚合”。Rollup有助于解决大跨度时间范围内的数据查询问题, 通过将时序数据降维度存储(例如秒级降为分钟级), Rollup显著降低查询所需扫描的实际数据量.Rollup

如果您已经熟练使用TSDB, 那么您可能熟悉TSDB的 Downsampling 概念. TSDB的Downsampling计算会扫描每条时间线中的数据点,并按照指定的时间窗口(1分钟,1小时…)进行数据分组聚合, 生成低时间粒度的数据点.

“Rollup”预处理 本质上是提前计算downsampling结果, 并且其计算结果随时可以被查询. Rollup 预处理 也被称为 预降采样.

例如,如果您每60秒写一个数据点并查询一年的数据,则查询时间序列将返回超过525k个数据点。如此多的数据点进行可视化图表绘制时也会造成绘制混乱。此时,您可能希望查看较低时间粒度的时序数据,例如以1小时为粒度的时序点(此时您只有大约8k个数据点要绘制, 能够更快速绘制业务图表并更容易标识出时序线的异常区间)。同时, Rollup操作并不会删除原始数据点, 您也可以针对部分感兴趣的时序区间, 向下钻取更精细的原始时序数据。

Rollup预处理的关键特性:

  • 预降采样可以大大降低查询时所需扫描的数据点,提升RT时间.
  • 支持多层级时间维度预降采样, 即 1分钟, 5分钟, 15分钟等维度均同时计算完成, 用户不论是向上查询粗维度的数据还是向下钻取细粒度数据, 均可秒级完成.

时序数据预聚合(Pre-aggregates)

当TSDB中存储的数据量较大时,用户按照指定的规则筛选和处理数据需要较长的等待时间,且根据实例规格和查询负载等因素, 可能出现查询性能抖动, 甚至因为数据点扫描超限, 查询超时等因素导致请求失败。

虽然 Rollup预处理 可以在通过降低时间粒度, 减少查询所需扫描的数据点, 但是 Rollup预处理 也存在不适用的场景:

  • Rollup预处理 只支持针对单条时间线进行时间维度的降采样处理.
  • 当Metric属于高基数(Cardinality)场景时, 即使单条时间线从时间粒度上减少了数据点扫描, 但是因为存在许多唯一的时间线. 复杂查询依然需要扫描同一Metric下不同时间线的相关数据点.

例如, 假设一个Metric(CPU), 统计个机器上的CPU计数(通过Tag标记不同服务器, 即生成不同的时间线), 此时若我们需要求出所有机器的CPU均值:

  • 当只有4个Web服务器时, 可以通过预降采样(Rollup)降低4条时间线上的所需扫描的时间点, 然后在内存中计算CPU均值.
  • 当处于10000台服务器的场景下(即1W条时间线), 我们需要扫描1W条时间线上的相关数据点, 此时各时间线上的预降采样(Rollup)产生的性能提升并不明显.

针对后面一种情况,用户可以基于 时序预聚合(Pre-Aggregates) 功能提前将Metric相关数据过滤、聚合好,然后写入到另外的Metric中, 用户直接查询Metric即可快速返回查询结果。

时序预聚合(Pre-Aggregates) 默认提供常见聚合类与统计类函数计算支持:pre-aggregate

这部分能力当前处于内测中,后续会继续发布

时间线分析

预降采样(Rollup) 针对单挑时间线, 按照时间粒度减少所需扫描的数据点数量;预聚合(Pre-Aggregates) 针对多条时间线做聚合计算, 然后存储为新的时间线供快速查询. 二者都是以聚合类计算为主. 而时间线分析是针对不同时间线上进行数据点之间的分析计算: 例如 时间线之间的对齐,差值,趋势变化等.

这部分能力当前处于内测中,后续会继续发布