InfluxDB简介
什么是时序数据库
时序数据库,全称时间序列数据库(Time Series Database,TSDB),用于存储大量基于时间的数据。时序数据库支持时序数据的快速写入、持久化,多维度查询、聚合等操作,记录了所有的历史数据。在查询时,将时间作为数据的过滤条件。
时序数据(Time Series Data)指的是一系列每个时间点产生的数据,例如CPU利用率,Jmeter每秒发送http请求产生的响应时间等。时序数据的使用场景广泛,包括DevOps监控,应用程序指标,压测指标,IoT传感器数据,实时动态数据分析等场景。
初识InfluxDB
InfluxDB是时序数据库中应用比较广泛的一种。在DB-Engines TSDB rank(https://db-engines.com/en/ranking/time+series+dbms)中位居首位,可见InfluxDB在互联网的受欢迎程度是非常高。
它由go语言开发,发布至今,已经有两个版本:InfluxDB1.x 和InfluxDB2.x
InfluxDB1.x系列提供一种类似SQL的查询语言InfluxQL,用于数据交互。
2019年1月新推出的influxDB2.0 alpha版本,主推全新的查询语言Flux,支持TICK架构。
TICK架构分析与各组件功能介绍
TICK架构 是 InfluxData 平台的组件的集合首字母缩写,该集合包括Telegraf、InfluxDB、Chronograf和 Kapacitor。TICK架构以及各组件分工情况如图所示:
注:上图中的可视化管理工具Chronograf,也可以用应用更广Grafana可视化工具替代,它也是用于大规模指标数据的可视化展示,提供包括折线图,饼图,仪表盘等多种监控数据可视化UI,特别是应用过程中考虑到扩展性问题,使用Grafana代替Chronograf更好。
2020 年底推出InfluxDB 2.0 正式版本,该版本又分为InfluxDB Cloud 和 InfluxDB OSS两个系列。目前最新版本InfluxDB 2.x(InfluxDB 2.7) 。与 InfluxDB 1.x 相比,InfluxDB 2.x 引入了一些新的特性和改进,旨在提供更强大、灵活和易于使用的时间序列数据存储和查询解决方案。以下是 InfluxDB 2.x 的一些关键特点和概念:
- Flux 查询语言: InfluxDB 2.x 引入了 Flux 查询语言,用于执行强大的数据处理和分析操作。Flux 提供了更灵活的查询能力,支持复杂的数据转换、过滤、聚合和连接操作,以更好地支持用户对时间序列数据的操作和分析。
- 新的数据存储引擎: InfluxDB 2.x 使用 Flux Engine 作为新的数据存储引擎。Flux Engine 具有更好的性能和扩展性,支持高并发写入和高效查询。
- Bucket 和 Organization: InfluxDB 2.x 引入了 Bucket 和 Organization 的概念。Bucket 是数据的逻辑容器,用于组织和存储时间序列数据,而 Organization 用于隔离和管理不同的用户或应用程序。
- 新的用户界面(UI): InfluxDB 2.x 提供了全新的仪表板和可视化工具,使用户能够轻松创建、定制和共享漂亮的图表和仪表板,以直观地展示时间序列数据。
- API 密钥和访问令牌: 为了实现更安全的访问和操作,InfluxDB 2.x 引入了 API 密钥和访问令牌。API 密钥用于身份验证,访问令牌用于授权对数据的访问。
- 支持多租户: InfluxDB 2.x 提供更好的多租户支持,允许在同一实例中隔离和管理多个不同的组织和数据。
- 新的存储结构: InfluxDB 2.x 采用TSM(Time-Structured Merge Tree,时间结构合并树)新的存储结构,支持更灵活的标签和更好的查询性能,同时改进了存储效率。
- 云原生和容器化: InfluxDB 2.x 被设计用于云原生环境和容器化部署,支持在 Kubernetes 或其他容器编排工具中运行。
- 更好的持久性查询支持: Flux 查询语言支持对查询结果进行持久性存储,使用户可以创建并定期执行持久性的计算任务。
InfluxDB基本概念
以下是 InfluxDB 2.x 的一些基本概念,这些概念有助于理解和使用 InfluxDB:
- Bucket(桶): Bucket 是 InfluxDB 中的基本存储单元,用于组织和存储时间序列数据。它是数据的逻辑容器,用于区分和隔离不同类型或不同来源的数据。
- Organization(组织): Organization 是 InfluxDB 中的组织概念,用于隔离和管理用户、应用程序或项目。每个用户可以属于一个或多个组织,Bucket 也属于一个组织。
- Measurement(测量值): Measurement 是 InfluxDB 中的数据表的概念。它类似于关系型数据库中的表,用于存储时间序列数据。每个 Measurement 包含一组字段和标签。
- Field(字段): Field 是 Measurement 中的一种数据类型,用于存储实际的数值数据。例如,温度、湿度等是字段的例子。
- Tag(标签): Tag 是 Measurement 中的一种索引类型,用于标识和过滤数据。标签通常用于存储维度信息,例如地理位置、设备 ID 等。
- Point(数据点): Point 是 InfluxDB 中时间序列数据的基本单位,它包含了时间戳、字段和标签。每个数据点都关联到一个 Measurement。
- API 密钥和访问令牌: 为了进行安全的访问和操作,InfluxDB 2.x 引入了 API 密钥和访问令牌。API 密钥用于身份验证,而访问令牌用于授权对数据的访问。
- Flux 查询语言: Flux 是 InfluxDB 2.x 中的查询语言,用于执行强大的数据处理和分析操作。它支持更灵活的查询、过滤、聚合和转换操作。
- 仪表板和可视化: InfluxDB 2.x 提供了仪表板和可视化工具,允许用户创建、定制和共享图表和仪表板,以直观地展示时间序列数据。
时序数据库与我们熟悉的关系型数据库有所不同,首先需要了解一下InfluxDB中字段的含义,如下图所示:
InfluxDB存储原理
InfluxDB的存储结构树是时间结构合并树(Time-Structured Merge Tree,TSM),它是由日志结构化合并树(Log-Structured Merge Tree,LSM),根据实际需求变化而来的。
**①. LSM树 **
LSM树包含三部分:Memtable,Immutable和SSTable。MemTable是内存中的数据结构,用于保存最近产生的数据,并按照Key有序地组织数据。内存并不是可靠存储,若断电就会丢失数据,因此通常会使用预写式日志(Write-ahead logging,WAL)的方式来保证数据的可靠性。
②. TSM存储引擎
TSM存储引擎主要包括四部分:Cache,WAL,TSM File,Compactor。下图中shard与TSM引擎主要部分放在一起,但其实shard在是TSM存储引擎之上的一个概念。在 InfluxDB 中按照数据产生的时间范围,会创建不同的shard分组,每个 shard 都有本身的 cache、wal、tsm file 以及 compactor。
应用场景
广泛应用于物联网、监控系统、日志分析、金融数据分析等。以下是一些时序数据库的常见应用场景:
- 监控和运维: 时序数据库常用于监控系统的性能和运行状态。通过记录服务器、网络设备、DevOps监控,应用程序指标,Jmeter压测指标等,管理员可以实时监测系统健康状况,快速识别并解决问题。
- 物联网(IoT): 物联网设备产生大量的时间序列数据,包括传感器读数、设备状态和事件记录。时序数据库能够高效地存储和查询这些数据,为物联网应用提供实时性和高吞吐量。
- 能源管理: 时序数据库可用于跟踪能源使用情况,记录电表读数、太阳能发电量、温度等信息。这对于能源消耗分析、可再生能源监测和节能优化非常有用。
- 金融数据分析: 金融行业需要处理大量的交易数据、股价变动和其他市场指标。时序数据库能够提供快速的查询和分析功能,以便实时监控市场情况和执行高频交易策略。
- 日志分析: 服务器日志、应用程序日志等产生的日志数据通常是按时间戳记录的。时序数据库可用于存储和分析大量的日志数据,以便追踪系统事件、调查问题和进行故障排除。
- 工业自动化: 在制造业和工业自动化中,时序数据库用于记录生产过程中的传感器数据、生产线状态和设备运行情况,以实现实时监控和质量控制。
- 环境监测: 时序数据库可用于存储气象数据、空气质量指标、水质数据等环境监测信息。这有助于研究气候变化、提高自然灾害预警系统的效能等。
- influxdb官网:https://www.influxdata.com/products/influxdb-overview/
- influxdb官网源码:GitHub - influxdata/influxdb: Scalable datastore for metrics, events, and real-time analytics
- influxdb文档:InfluxData Documentation
- 使用手册:Get started with InfluxDB | InfluxDB OSS v2 Documentation
- 免费influxdb申请云无服务器:https://www.influxdata.com/influxdbpricing/
参考:InfluxDB 2.0 原理与应用实践 - 脉脉