跳至主要內容

TimeSeries Datebase

LincZero大约 9 分钟

TimeSeries Datebase

参考:

  • 官网:https://www.influxdata.com/

  • https://jasper-zhang1.gitbooks.io/influxdb/content/Introduction/getting_start.html

  • https://zhuanlan.zhihu.com/p/80062750

    InfluxDB技术交流群(QQ):663274123

时序数据库选型

参考:时序数据库选型open in new window建议看原文

参考:什么是时序数据库?我们为什么需要时序数据库?open in new window

数据特征:

  1. **时间戳:**每个数据点都带有时间戳,这个时间戳对于数据的计算和分析十分重要。
  2. **结构化:**与来自网络爬虫、微博、微信的海量数据不同,联网设备或监控系统生成的数据都是结构化的。这些数据都具有预定义的数据类型或固定长度,比如智能电表采集的电流、电压就可以用 4 字节的标准的浮点数来表示。
  3. **流式:**数据源以近似恒定速率生成数据,如音频或视频流。这些数据流彼此独立。
  4. **流量平稳可预测:**与电商平台或社交媒体网站的数据不同,时序数据的流量在一段时间内是稳定的,并且可以根据数据源的数量和采样周期来进行计算和预测。
  5. **不变性:**时序数据一般都是 append-only,类似于日志数据,一般不容许而且也没有修改的必要。很少有场景,需要对采集的原始数据进行修改。
  6. 量级大:
    • 产生频率快(每一个监测点一秒钟内可产生多条数据)
    • 测点多信息量大(常规的实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)

挑战

时序数据通常用于比较当前数据与历史数据、检测异常、生成实时警报以及预测未来趋势。时序数据解决方案一般考虑以下问题:

  • 时序数据量通常很大,因此在执行存储、索引、查询、分析等操作时变得更加困难。
  • 时序数据需要实时计算和分析,以便于实时检测异常并告警。 延迟可能会导致故障和业务影响。
  • 通常需要关联来自不同传感器和其他源的数据,这使情况变得更复杂。
  • 不管是原始数据查询、还是聚合数据查询,时序数据的查询一般都会带上查询时间范围,一方面是根据时间范围计算聚合时间窗口,另一方面是为了更高效的检索数据,提高查询效率,避免大量无效数据的扫描。
  • 数据在一段时间内的变化趋势比单个数据点重要得多。例如,考虑到网络不可靠性或传感器读数异常,我们可能会在一段时间内的某个平均值超过阈值时设置警报,而不是在单个数据点上这样做。

TDengineopen in new window 这类时序数据库,是基于时序数据的特点以及应用的特点进行优化和设计的,专为解决上述问题而生。这类专业的数据库使时序数据的处理变得更加高效,性能也比通用数据库更好。

时序点结构

每个时序点结构如下:

  • timestamp: 数据点的时间,表示数据发生的时间。
  • metric: 指标名,当前数据的标识,有些系统中也称为name。
  • value: 值,数据的数值,一般为double类型,如cpu使用率,访问量等数值,有些系统一个数据点只能有一个value,多个value就是多条时间序列。有些系统可以有多个value值,用不同的key表示
  • tag: 标签,一般为字符串类型,如主机名、设备名等维度信息,用于分类和聚合计算

可选范围

选数据库,当然要先去DB-ENGINE上看看排名。有这么几款时序数据库,进入了我们的选择范围。

首先是遥遥领先的InfluxDB,行业内最广泛应用的。然后是两款刚进入业内视野的国产时序数据库DophinDB和TDengine。最后是两款副业是时序数据库的:自带监控体系的Prometheus和分布式搜索引擎ElasticSearch。

参考资料:https://db-engines.com/en/ranking/time+series+dbmsopen in new window

对比

基于上述各数据库的特点分析,总结如下:

数据库优势劣势
Influxdb应用最广泛,认可度最高,成功案例丰富集群版收费,单机版适用于小数据集
TDengine性能强悍,国产自主研发,集群版免费,也有附加功能的收费版缺少大厂的最佳实践案例,还在持续迭代开发
DolphinDB高性能、分布式,支持快速存储、检索、分析及计算提供一站式解决方案完全收费,适用于金融领域
ES集群化、易于使用,适合多种分析查询应用场景功能和性能上与专业时序数据库有很大的差距
Prometheus独立地开源监控系统和告警工具,广泛应用于Kubernetes生态目前监控体系基于zabbix,不便于再部署一套同类型的监控系统

结构原理

参考:https://www.cnblogs.com/MWCloud/p/11475347.html

自研

难点

难实现功能

  1. 数据压缩,https://heapdump.cn/article/2268808
  2. 内存中的倒排索引
  3. 查询语法封装
    • SQL支持
    • 正则支持
  4. WAL(预写日志)、内存映射
  5. 负载均衡

可以参考的点

  • 盐值(Salt)

TDengine

资料

选型总结

官方文档真的非常详尽