一、简述
1、InfluxDB是一款用Go语言编写的开源分布式时序、事件和指标数据库,使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展,是 InfluxData 的核心产品。该数据库现在主要用于存储涉及大量的时间戳数据
2、主要应用于:物联网(Iot)传感器数据,性能监控、应用程序指标、实时分析等场所。
3、特征如下:
– 无结构(无模式):可以是任意数量的列(tags)。
– 可以设置metric的保存时间。
– 支持与时间有关的相关函数(如min、max、sum、count、mean、median等),方便统计。
– 支持存储策略:可以用于数据的删改(influxDB没有提供数据的删除与修改方法)。
– 支持连续查询:是数据库中自动定时启动的一组语句,和存储策略搭配可以降低InfluxDB的系统占用量。
– 原生的HTTP支持,内置HTTP API。
– 支持类似SQL语法。
– 支持设置数据在集群中的副本数。
– 支持定期采样数据,写入另外的measurement,方便分粒度存储数据。
– 自带web管理界面,方便使用(登入方式:http://< InfluxDB-IP >:8083)。
– 支持Grafana画图展示。
注:InfluxDB+Grafana,你就可以写一些简单的程序了,可以只负责写后端逻辑部分,数据都可以存入InfluxDB,然后通过Grafana展示出来。
二、基本概念
1、相比 传统数据库,具体如下:
InfluxDB | 传统数据库 |
---|---|
database | 数据库 |
measurement | 表 |
point | 表中的一行数据 |
表中的数据对应的组成结构,如下:
point属性 | 含义 |
---|---|
time | 数据记录的时间,是主索引(自动生成) |
tags | 各种有索引的属性 |
fileds | 各种value值(没有索引的属性) |
tag set:不同的每组tag key和tag value的集合。tag在InfluxDB中会按照字典序排序,不管是tag-key还是tag-value,只要不一致就分别属于两个tag set,
例如:hostname=server01,device=/data和hostname=server02,device=/data就是两个不同的tag set。
field set:每组field key和field value的集合;
retention policy:数据存储策略(默认策略为autogen,永久性保存)InfluxDB没有删除数据操作,规定数据的保留时间达到清除数据的目的,InfluxDB会定期清除过期的数据。
Series:共同retention policy,measurement和tag set的集合。相当于是InfluxDB中一些数据的集合,在同一个database中,retention policy、measurement、tag sets完全相同的数据同属于一个series,同一个series的数据在物理上会按照时间顺序排列存储在一起。
Shard:在InfluxDB中是一个比较重要的概念,它和Retention policy相关联。每一个存储策略下会存在许多shard,每一个shard存储一个指定时间段内的数据,并且不重复,例如7点-8点的数据落入shard0中,8点-9点的数据则落入shard1中。每一个shard都对应一个底层的tsm存储引擎,有独立的 cache、wal、tsm file。
注意:
- tag 只能为字符串类型
- field 类型无限制
- 不支持join
- 支持连续查询操作(汇总统计数据):CONTINUOUS QUERY
- 配合Telegraf服务(Telegraf可以监控系统CPU、内存、网络等数据)
- 配合Grafana服务(数据展现的图像界面,将influxdb中的数据可视化)
2、InfluxDB和OpentsDB比较
特性 | InfluxDB | OpentsDB |
---|---|---|
单机部署 | 部署简单、无依赖 | 需要搭建 Hbase,创建 TSD 数据表,配置 JAVA 等 |
集群 | 开源版本没有集群功能 | 集群方案成熟 |
资源占用 | cpu 消耗更小,磁盘占用更小 | 资源消耗相比更多 |
存储类型 | TSM | 基于HBase存储时序数据(LSM) |
存储特点 | 同一数据源的tags不再冗余存储 ;列式存储,独立压缩 | 存在很多无用的字段;无法有效的压缩;聚合能力弱 |
性能 | 查询更快,数据汇聚分析较快 | 数据写入和存储较快,但查询和分析能力略有不足 |
开发 | 版本升级快,但架构简单,类SQL语言(InfluxQL)易开发 | API较为丰富,版本较为稳定 |
三、常用命令
-- 查看所有的数据库
show databases;
-- 使用特定的数据库
use database_name;
-- 查看所有的measurement
show measurements;
-- 查询10条数据
select * from measurement_name limit 10;
-- 数据中的时间字段默认显示的是一个纳秒时间戳,改成可读格式
precision rfc3339; -- 之后再查询,时间就是rfc3339标准格式
-- 或可以在连接数据库的时候,直接带该参数
influx -precision rfc3339
-- 查看一个measurement中所有的tag key
show tag keys
-- 查看一个measurement中所有的field key
show field keys
-- 查看一个measurement中所有的保存策略(可以有多个,一个标识为default)
show retention policies;