首页 > 其他分享 >深入浅出几款开源时序数据的设计(2022)

深入浅出几款开源时序数据的设计(2022)

时间:2023-12-29 12:35:44浏览次数:32  
标签:Metric 深入浅出 Value 时序 开源 Tag 2022 Label 数据

Influxdb

InfluxDB是一款流行的开源时序数据库,用于存储和分析时间序列数据。在InfluxDB中,时间序列数据通过MeasurementTagField来表示。

Measurement:
  • 相当于数据表,用于归档某一类相关时序数据。例如可以有CPU measurementMemory measurement
  • Measurement只包含时序字段,没有Schema定义。这使得InfluxDB有很高的灵活性。
  • 一个Database可以包含多个Measurement
Tag:
  • 用来标识数据所属的维度或分类。如hostregionnode等。
  • Tag的值可以是字符串或整数,支持筛选和聚合。
  • Measurement中的每条数据都需要包含相同的Tag集。Tag用于快速查询和分组数据。
  • Tag通常不会改变,如果改变会导致数据的意义和分类发生变化。
Field:
  • 包含具体的时序指标数据。如cpu_usagefree_memory等。
  • Field的值可以是浮点数、整数、字符串甚至布尔值。
  • 不同的数据点可以包含不同的Field。一个Measurement不需要预先定义Field
  • Field用于记录时序数据的变化,可以随时间变化。
  • Field支持运算和聚合,如MEANSUMCOUNT等。

一个完整的时序数据点包含MeasurementTag集和一个或多个Field。 例如:

1、Measurement: 
	CPU
	
2、Tag: 
	host=server01, region=us-west
	
3、Field: 
	cpu_usage=0.5, cpu_idle=0.4

要存储时序数据,只需要不断插入符合这一结构的数据点,InfluxDB会自动维护其时间戳和索引。 查询时序数据时,可以在MeasurementTagField上进行过滤、聚合和运算。这使得InfluxDB具有强大的时间序列分析能力。其灵活的结构也使我们可以随时调整和丰富时序数据的维度与指标。 InfluxDB通过这一时序数据结构,提供了易于使用且功能强大的时间序列存储与分析平台。


OpenTsdb

OpenTSDB是一款开源的分布式时序数据库,用于海量时间序列数据的存储和分析。它的数据模型主要由Metric、Timestamp和Value组成。

Metric:
  • 相当于InfluxDB中的Measurement,用于表示一个时序数据分类。
  • 每个Metric都需要定义数据点中的字段(tags)和字段类型(tagk 和 tagv)。
  • 一个OpenTSDB实例可以包含任意数量的Metric。
Timestamp:
  • 表示时序数据点的时间戳,精确到秒。
  • 时间戳是时序数据的索引,用于快速查询时间范围内的数据。
  • 数据点时间戳必须是唯一且递增的。
Value:
  • 表示时序数据点的数值,可以是整数或浮点数。
  • 每个数据点必须包含一个Value。一个Metric可以有多个Value,表示不同的指标。
  • Value用于记录时序数据的变化,以表现指标随时间的趋势。

除此之外,每个数据点还可以包含一个或多个Tag,用来记录该数据点的维度信息。Tag类似于InfluxDB,用于快速grouping和filtering数据。 一个完整的OpenTSDB数据点包含:

Metric - 定义数据结构 
Timestamp - 时间戳,作为索引 
Value - 时序指标数据 
Tag(可选)- 数据维度信息

例如:

###################################################
Metric: sys.cpu.user 
Timestamp: 1577836800   
Value: 0.2       
Tagk: host   tagv: web01  
####################################################
Metric: sys.cpu.system
Timestamp: 1577836800
Value: 0.1 
Tagk: host  tagv: web01
###################################################

与InfluxDB相比,OpenTSDB的主要差异有:

  1. Metric需要预定义数据结构,而InfluxDB的Measurement是无Schema的。
  2. OpenTSDB只支持秒级时间戳,InfluxDB支持更高精度。
  3. OpenTSDB仅支持数值型Value,而InfluxDB的Field支持更丰富的类型。
  4. InfluxDB有更加简单的部署方式,OpenTSDB较重且复杂。

Prometheus

Prometheus是一款流行的开源时序数据库,专为监控系统和时序数据构建。它的数据模型主要由Metric、Label和 Sample组成。

Metric:
  • 表示一个时序指标,对应于一个监控指标名称。如cpu_usage、free_memory等。
  • Metric仅包含时序数据名称,没有预定义的结构或类型。这使Prometheus具有很高的灵活性。
  • 一个Prometheus实例可以包含任意数量的Metric。
Label:
  • 用来描述和区分相同Metric的数据。类似于其他时序数据库的Tag。
  • Label通常表示数据的维度或属性,如instance、job、region等。
  • 每个样本数据都必须包含相同的Label集。Label用于快速查询和聚合特定维度的数据。
  • Label的值可以是字符串、布尔值或整数。支持在Label上过滤和分组数据。
Sample:
  • 表示一条时序数据,包含Timestamp、Value和Label集。
  • Timestamp表示时序数据的时间戳,精度为毫秒。它用于排序和查询给定时间范围的数据。
  • Value表示时序指标的值,可以是浮点数、整数或字符串。
  • Label集用于标识该Sample数据的属性与维度。相同Label的Sample表示同一指标的不同记录。

一个Prometheus Sample包含:

Metric - 时序指标名称 
Timestamp - 时间戳,毫秒精度 
Value - 指标数值 
Label - 数据属性集

例如:

###################################################
Metric: cpu_usage
Timestamp: 1577836800000 
Value: 0.6
Label: instance="web01", job="webapp"
###################################################
Metric: free_memory 
Timestamp: 1577836800000
Value: 20*1024*1024 
Label: instance="web01", job="webapp"
###################################################

与其他时序数据库相比,Prometheus的主要特点有:

  1. 无Schema,Metric和Label都不需要预定义,具有很高的灵活性。
  2. 自我监控,Prometheus同时也是一个监控目标,可以监控自身状态指标。
  3. 拉式采集,不依赖外部推送,Prometheus Server主动从监控目标抓取数据。
  4. 灵活的查询语言PromQL,支持复杂的聚合分析与运算。
  5. 易于与Grafana、Alertmanager等工具集成,生态完备。
  6. 轻量级部署,提供单机版本,易于在容器与云上使用。

Prometheus通过简单 yet 功能强大的数据模型与查询语言,加上易于组合的工具生态,已经成为云原生监控的事实标准。


TimescaleDB

TimescaleDB是一款开源的时序数据库,构建在PostgreSQL之上。它继承了PostgreSQL的所有功能,并在此基础上进行时序相关扩展,用于存储和分析大规模时间序列数据。 TimescaleDB的数据模型主要由Hypertable、Chunk和 Raw Timeseries三部分组成。

Hypertable:
  • 相当于PostgreSQL的表,用于存储时序数据。
  • 每个Hypertable都需要指定两个时间相关的列,作为主键和时序索引。
  • Hypertable可以存储原生PostgreSQL数据类型,并支持标准的SQL查询、索引等功能。
  • 一个Database可以包含任意数量的Hypertable。
Chunk:
  • 在Hypertable下进行细分,用于按时间范围划分时序数据。
  • 每个Chunk包含指定时间范围内的所有Raw Timeseries。
  • Chunk是TimescaleDB进行查询优化和下采样的基本单位。在Chunk级别可以设置不同的压缩与索引策略。
Raw Timeseries:
  • 表示原始的时序数据点,包含时间戳、指标值和其他维度信息(标签)。
  • 一个Raw Timeseries必须归属于一个Chunk,通过Chunk来确定其所在的时间范围。
  • Raw Timeseries支持PostgreSQL数据类型,用于记录时序数据的变化,可以随时间变化。

通过Hypertable、Chunk和Raw Timeseries三层结构,TimescaleDB实现了:

  1. 对SQL和PostgreSQL生态友好的支持,简单易用。
  2. 灵活的数据模型,Hypertable无需预定义Schema,Chunk可以根据需要设置策略。
  3. 数据分区与压缩,在Chunk层面进行时序相关优化,提高存储效率和查询性能。
  4. 支持时序函数,如降采样、滚动窗口等。这些函数可以直接在SQL中使用。
  5. 可扩展性,通过分布式能力支持超大规模时序数据。

一个完整的时序数据点在TimescaleDB中表示为:

Hypertable - 逻辑表,确定数据结构 
Chunk - 确定数据所在时间范围 
Raw Timeseries - 包含指标时间戳与值

例如:

Hypertable: conditions  
- timec (timestamp,字段1, 字段2, ...)  
- location (lat, lon)   ... 

Chunk: 2020-01-01 00:00:00 to 2020-01-31 23:59:59

Raw Timeseries:
- timec: 2020-01-15 12:30, 20, 30%   
- location: 37.7°, -122.4° 
- timec: 2020-01-20 15:10, 25, 35%  
- location: 37.8°, -122.41°  
...

TimescaleDB通过 Postgres相容的界面和丰富的SQL支持,为时序数据管理带来非常简洁和自然的体验。同时,其在存储效率和时序查询性能上的优化,以及强大的分布式能力,使其成为管理大规模时序数据的理想平台。


QuestDB

QuestDB是一款开源的时序数据库,基于列式存储设计,专为高性能时序数据 analytic 而构建。它的数据模型主要由Symbol、Timestamp和Value组成。

Symbol:
  • 相当于数据表,对应存储一类时序数据。每个Symbol都需要定义Schema,包含字段名称和类型。
  • QuestDB支持的字段类型有:boolean、byte、short、int、long、float、double、string等。
  • 一个QuestDB实例可以包含任意数量的Symbol。
Timestamp:
  • 表示时序数据点的时间戳,精度为毫秒。用于对数据进行排序和快速查询给定时间范围的数据。
  • 需要定义为TIMESTAMP类型,QuestDB使用时间戳作为主键。
  • 数据点时间戳必须是唯一且递增的。
Value:
  • 记录时序数据点的数值,只支持数值型数据如float、int等。不支持非数值类型。
  • 每个数据点必须包含一个Value。一个Symbol可以有多个Value,表示不同的指标。
  • Value的变化趋势表明指标随时间的变化,用于时间序列分析。

除此之外,每个数据点还可以包含一个或多个Tag,用来记录该数据点的维度信息。Tag可以是字符串或整数,用于快速过滤和分组数据。

一个完整的QuestDB数据点包含:

Symbol - 定义数据结构 
Timestamp - 时间戳,毫秒精度 
Value - 时序指标数据 
Tag(可选)- 数据维度信息

例如:

Symbol: cpu 
Timestamp: 1577836800000  
Value: 0.6  
Tag: host=server1

与其他时序数据库相比,QuestDB的主要特征是:

  1. 专为高性能时序数据分析设计,性能显著优于传统关系数据库。
  2. 仅支持数值型Value,缺乏对非数值类型的支持。
  3. 较重的部署要求,需要依赖Java运行环境。
  4. SQL查询方式,易于上手和迁移现有工具/对象。
  5. 支持较复杂的Schema定义,不像Prometheus那么Schema-less。

QuestDB作为一款高性能的开源时序数据库,为SQL用户和时序数据分析带来很高价值。

标签:Metric,深入浅出,Value,时序,开源,Tag,2022,Label,数据
From: https://blog.51cto.com/mickeyzzc/9025412

相关文章

  • 优秀好用的开源项目
    1、halo优秀的个人博客项目2、WechatExporter:微信聊天记录迁移和备份工具。这是一个用于导出微信聊天记录的工具,支持以HTML、PDF或文本格式保存聊天内容,适用于Windows和macOS系统。3、SMS4J:Java的短信服务聚合框架。该项目集成了国内众多第三方短信服务,简化了接入多个......
  • 深入浅出一致性哈希
    哈希是什么哈希又称散列,是一种计算数据指纹的方法。哈希函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来业务场景常见的业务场景;网站用户请求后,为了性能一般都会加一层缓存。缓存有多个节点,每个节点存储了不同数据。获取数据,先根据数据取模(哈希)找到缓存节点......
  • IaaS--如何降低故障的影响(何恺铎《深入浅出云计算》笔记整理)
     【常见故障及解决方法】1、第一种故障是在宿主机的级别,这也是从概率上来说最常见的一种故障。宿主机出现问题,虚拟机肯定都会有问题。解决方法是,尽量做好集群,采用HA的方式,做好救场。集群也应该注意,虚拟机尽量放在不同虚拟机上,甚至对应的宿主机都最好避免在同一个机架上;2、第二......
  • 持续领先 | 开源网安连续三年上榜ISC数字安全创新能力百强
    12月27日,第四届ISC2023数字安全创新能力百强评选(以下简称“创新百强”)圆满完成。开源网安入选创新能力雷达图谱,RASP实时应用自我防护平台入选数字安全创新能力百强榜单,斩获“供应链与应用安全”领域大奖,这是开源网安连续三年荣登创新百强榜单。本届创新百强基于对产业热点和行业趋......
  • 开源免费又好用的中式数据报表:UReport2是一款高性能的架构在Spring之上纯Java报表引
    北润乾、南帆软,数加发力在云端。uReport身何安?中式报表真开源。报表江湖之中,uReport安身立命的产品品类定位是什么?说来很简单,uReport的价值在于填补了这样一个市场空白:开源免费又好用的中式数据报表UReport2是一款高性能的架构在Spring之上纯Java报表引擎,通过迭代单元格可以......
  • WSO2是一个开源的API管理平台,它提供了一套完整的解决方案,用于设计和发布API,创建和管理
    WSO2是一个开源的API管理平台,它提供了一套完整的解决方案,用于设计和发布API,创建和管理开发人员社区,以及以可扩展的方式保护和路由API流量¹。它利用来自WSO2平台的成熟组件来保护,集成和管理API¹。此外,它还与WSO2分析平台集成,提供现成的报告和警报,让您即时了解API行为¹。WSO2API......
  • 开源数据血缘和元数据管理框架DataHub的血缘摄取 V0.12.1版本
    DataHUb的安装很简单:你有绿色上网就soeasy前置条件,你已经运行好DataHub整个Docker-Compse服务打开地址:http://host:9002/输入账号DataHub密码DataHub查看框架运行路线轨迹第一步源数据获取(1.1)点击这里(1.2)点击这里(1.3)点击这里{选择数据源的类型}:以MYSQL示例(1......
  • 22.7k star,推荐一本开源docker书籍,实用
    1简介Docker是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要认识和掌握Docker,节约......
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-7】 - 配置管理-Mvc【Plugin-Metric
    前言:继上篇:Taurus.NetCore微服务开源框架:Admin插件【4-6】-配置管理-Mvc【Plugin-Doc接口测试及文档】本篇继续介绍下一个内容:系统配置节点:Mvc- Plugin-Metric接口调用次数统计:配置界面如下:1、Metric.IsEnable:配置当前接口统计插件是否可用打开开关时,可以通......
  • 人工智能大模型原理与应用实战:开源工具与框架的应用
    1.背景介绍人工智能(ArtificialIntelligence,AI)是一门研究如何让计算机模拟人类智能的科学。随着数据规模的不断扩大、计算能力的不断提高以及算法的不断创新,人工智能技术在各个领域取得了显著的进展。目前,人工智能的主要应用领域包括自然语言处理(NaturalLanguageProcessing,NL......