目录
InfluxDB简介
InfluxDB 是一款开源的时间序列数据库,专为处理和分析带有时间戳的数据设计,如监控数据、物联网传感器数据等。它由InfluxData公司开发,使用Go语言编写,具备高效的数据写入与查询性能,支持类SQL查询语言(InfluxQL)。它能够轻松应对高容量时间序列数据的存储与管理,广泛应用于实时分析、监控系统及物联网领域,提供灵活的数据保留策略及强大的聚合功能。
InfluxDB应用场景
InfluxDB 作为一种高效的时间序列数据库,适用于多种应用场景。以下是其主要应用领域:
-
实时监控与告警:用于系统、网络及应用程序的性能监控,支持设定复杂的告警规则,实现自动化监控与响应。
-
物联网(IoT)数据存储与分析:处理来自传感器和设备的大量时间序列数据,支持快速写入和查询操作,适合实时分析和历史数据分析。
-
应用性能监控(APM):追踪和优化应用程序性能,通过收集和分析性能指标来识别瓶颈和提升用户体验。
-
业务度量与分析:记录并分析关键业务指标(KPIs),帮助企业做出基于数据驱动的决策。
-
工业互联网:在制造业中,用于机器状态监测、预测性维护等,提高生产效率和设备可靠性。
-
金融交易分析:处理金融市场中的高频交易数据,支持风险管理和交易策略优化。
InfluxDB特征
-
时间序列数据:天然支持时间戳数据的存储与查询,适用于随时间变化的数据。
-
高性能:TSM存储引擎提供高速的数据写入与压缩,优化了时序数据的存储和查询效率。
-
Schemaless(无结构):允许灵活的数据模式,每条记录可以有任意数量的列,无需预先定义表结构。
-
Retention Policies:自动管理数据生命周期,可设定数据保留策略,自动删除过期数据。
-
Continuous Queries:自动执行的聚合查询,定期计算并存储汇总数据,提高查询效率。
-
API支持:提供HTTP API,支持方便的数据写入和查询,兼容多种数据输入协议,如Graphite、CollectD、OpenTSDB等。
-
水平扩展性:支持集群部署,允许通过添加更多节点来扩展存储容量和查询性能,适应大规模数据的增长需求。
InfluxDB版本差异
InfluxDB 的版本之间存在一些关键差异,主要体现在功能集、性能优化及使用许可等方面。以下是 InfluxDB 主要版本的一些显著差异:
InfluxDB v1.x
- 开源且免费:v1.x 系列是完全开源的,并采用 Apache 2.0 许可证。
- 单一节点架构:默认情况下支持单节点部署,虽然可以通过手动配置实现集群模式,但这不是官方推荐的做法。
- 数据保留策略:用户可以设置数据保留策略来自动删除过期数据。
- 查询语言 InfluxQL:提供了类 SQL 查询语言 InfluxQL,用于数据查询和操作。
- 插件系统有限:与后续版本相比,v1.x 的插件系统相对简单。
InfluxDB v2.x
- 改进的存储引擎:引入了新的存储引擎,提高了写入速度和查询效率,同时减少了磁盘空间占用。
- 增强的安全性:增加了对多租户的支持,提供了更细粒度的访问控制列表(ACL),以及更好的认证机制。
- Flux 查询语言:除了传统的 InfluxQL 外,v2.x 引入了全新的 Flux 查询语言,旨在提供更强的数据处理能力。
- 内置仪表板和可视化工具 Chronograf:在 v2.x 中更加集成化,提供了更强大的数据可视化和监控能力。
- 自动化任务管理 Kapacitor:更好地集成于平台内,使得告警和事件响应更为灵活高效。
- 企业级功能:包括高可用性集群、水平扩展等特性,部分高级功能需要订阅 InfluxDB Cloud 或者购买 InfluxDB Enterprise 版本。
InfluxDB数据模型解析
InfluxDB的数据模型:
-
Measurement: 主要用来存储具有相似特征或属于同一类别的数据点集合,类似于关系型数据库中的表(table);包含了列Timestamp时间戳,field字段和tag标签。
-
Field set: 每组field key和field value的集合,即我们需要的字段,如internale[key] = 76[value], external[key]= 18[value]。不可索引
-
Tag set: 不同的每组tag key和tag value的集合,如device[key]= dev1[value], buiding[key]= b1[value]。可索引
-
Point:表里面的一行数据,由时间戳(timestamp)、标签(tag)、字段(field)和组成:
-
时间戳time:每条数据记录的时间,也是数据库自动生成的主索引,如果时间戳没有指定。那么InfluxDB就使用当前系统的时间戳(纳秒)
-
字段field:字段包含数据的实际值,可以是各种数据类型(整数、浮点数、字符串、布尔值等);与标签不同,字段在查询时可以进行数学运算。
-
标签tag:用于索引和过滤数据;通常是字符串类型。
-
-
series:series是共同retention policy(数据保留策略),Measurement 和 tag set的集合。
注意:在 InfluxDB 表结构中,Field 和 Tag 是用于存储数据的两种不同类型。
Field(字段):
Field 用于存储实际的数值数据,例如温度、湿度等测量值。
Field 是可变的,可以随时间的推移而改变其值。
Field 的值可以进行聚合计算,例如求平均值或总和等。
Field 不适合用于过滤和索引数据,因为它没有元数据信息。
Tag(标签):
Tag 用于存储元数据信息和标识数据的键值对,例如传感器名称、地理位置等。
Tag 是不可变的,一旦设置就不能更改。
Tag 的值不能进行聚合计算,只能用于过滤和分组查询。
Tag 是 InfluxDB 中的主要索引机制之一,可以提高查询性能和数据过滤效率。
InfluxDB存储架构
- Database(数据库):与传统关系型数据库相似,InfluxDB 中的数据首先被组织在数据库中。
- Retention Policy (RP):定义了数据在数据库中的保存期限。当数据超过了指定的时间限制,它们将自动被删除。
- Shard Group(分片组):InfluxDB 将数据按时间段划分成不同的 shard group。每个 shard group 覆盖特定的时间范围。
- Shard(分片):shard 是物理存储的基本单位,包含在一个特定时间段内的所有数据。每个 shard group 可能包含多个 shard,这些 shard 可分布在不同的节点上以实现分布式存储。
InfluxDB 使用一种名为 TSM (Time-Structured Merge Tree) 的存储引擎来管理数据:
- TSM 文件:数据持久化后会存储为 TSM 格式的文件。TSM 文件优化了写入性能,并提供了高效的压缩算法。
- WAL (Write-Ahead Log):为了防止数据丢失,在数据写入到 TSM 文件之前,会先写入 WAL 中。这保证了即使在崩溃的情况下也能恢复未持久化的数据。
InfluxDB 和 Elasticsearch 都使用了倒排索引(Inverted Index)来加速数据查询,但是Elasticsearch与InfluxDB在数据模型和应用场景上有显著区别。
Elasticsearch采用文档模型,适用于全文搜索、日志分析等非结构化数据处理,强调复杂查询和文本分析能力。针对多变文本数据优化。
InfluxDB基于时间序列模型,专注于如监控、传感器数据的时间序列分析,重点在于高效存储和查询带时间戳的数据,支持快速聚合计算及数据保留策略管理。针对和时间相关数值数据优化。
InfluxDB安装
步骤 1: 拉取 InfluxDB 1.8 镜像
docker pull influxdb:1.8
步骤 2: 运行 InfluxDB 容器,并数据持久化
/local/path
应替换为您希望存储 InfluxDB 数据的主机路径
docker run -d --name influxdb -p 8086:8086 -v /local/path:/var/lib/influxdb influxdb:1.8
步骤3:验证安装(查看日志或进入容器内)
docker logs influxdb
进入容器内命令如下:
可以看到版本,则安装成功。