简介
InfluxDB是一个由InfluxData开发的开源时序型数据库。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。可以理解为按时间记录一些数据(常用的监控数据、埋点统计数据等),然后做统计
- 与传统数据库的概念对比
influxDB中的名词 | 传统数据库中的概念 |
---|---|
database | 数据库 |
measurement | 数据库中的表 |
points | 表中的一行数据 |
-
Point
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point属性 | 传统数据库中的概念 |
---|---|
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
field | 各种记录值(没有索引的属性) |
tags | 各种有索引的属性 |
-
Series
Series 相当于是 InfluxDB 中一些数据的集合。 在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series。 同一个 series 的数据在物理上会按照时间顺序排列存储在一起。
-
组件
TSM 存储引擎主要由几个部分组成: cache、wal、tsm file、compactor。
-
Cache:
cache 相当于是 LSM Tree 中的 memtabl。插入数据时,实际上是同时往 cache 与 wal 中写入数据,可以认为 cache 是 wal 文件中数据在内存中的缓存。当 InfluxDB 启动时,会遍历所有的 wal 文件,重新构造 cache,这样即使系统出现故障,也不会导致数据的丢失。
cache 中的数据并不是无限增长的,有一个 maxSize 参数(默认为 25MB)用于控制当 cache 中的数据占用多少内存后就会将数据写入 tsm 文件。每当 cache 中的数据达到阀值后,会将当前的 cache 进行一次快照,之后清空当前 cache 中的内容,再创建一个新的 wal 文件用于写入,剩下的 wal 文件最后会被删除,快照中的数据会经过排序写入一个新的 tsm 文件中。
-
WAL
wal 文件的内容与内存中的 cache 相同,其作用就是为了持久化数据,当系统崩溃后可以通过 wal 文件恢复还没有写入到 tsm 文件中的数据。
-
TSM File
单个 tsm file 大小最大为 2GB,用于存放数据。
-
Compactor
compactor 组件在后台持续运行,每隔 1 秒会检查一次是否有需要压缩合并的数据。
主要进行两种操作,一种是 cache 中的数据大小达到阀值后,进行快照,之后转存到一个新的 tsm 文件中。
另外一种就是合并当前的 tsm 文件,将多个小的 tsm 文件合并成一个,使每一个文件尽量达到单个文件的最大大小,减少文件的数量,并且一些数据的删除操作也是在这个时候完成。
-
目录与文件结构
InfluxDB 的数据存储主要有三个目录。默认情况下是 meta, wal 以及 data。
meta 用于存储数据库的一些元数据,meta 目录下有一个 meta.db 文件。
wal 目录存放预写日志文件。
data 目录存放实际存储的数据文件。
安装及配置
-
环境
ubuntu 20.04
-
安装
sudo apt install influxdb
sudo apt install influxdb-client
-
查看状态、启动、关闭
// 查看状态 q退出 / 启动 / 关闭 / 重启
sudo service influxdb status / start / stop / restart以服务方式启动 sudo service influxdb start
以非服务方式启动 sudo influxd
-
查看配置文件
influxd config
influxdb默认使用内存索引,所以在使用过程中内存占用会越来越大,并且导致查询越来越慢
修改为tsi 磁盘索引: index-version="tsi1"
官方详细配置文件
- 进入命令行客户端
influxinflux -precision rfc3339 (数据显示时间而非时间戳)
简单使用
- 数据库与表的操作
# 查询所有数据库
show databases# 创建数据库
create database testDb;
# 删除数据库
drop database testDb;
# 选择数据库
use testDb1;# 查看该数据库下的全部表
show measurements;# 创建表,直接在插入数据的时候指定表名
insert test,host=127.0.0.1,monitor_name=test count=1
# 删除表
drop measurement "test"
- 增查
# 增
insert test,host=127.0.0.1,monitor_name=test count=1表名:test
tag :(只能为字符串类型)host=127.0.0.1,monitor_name=test
field :(类型无限制)count=1# 查
select * from test order by time desc
- 数据保存策略(Retention Policies)
# InfluxDB本身不提供数据的删除操作,因此用来控制数据量的方式就是定义数据保留策略。
# 查看当前数据库 Retention Policies
show retention policies on "db_name"
# name--名称,此示例名称为 autogen
# duration--持续时间,0代表无限制
# shardGroupDuration--shardGroup的存储时间,shardGroup是InfluxDB的一个基本储存结构,应该大于这个时间的数据在查询效率上应该有所降低。
# replicaN--全称是REPLICATION,副本个数
# default--是否是默认策略# 创建新的Retention Policies
create retention policy "rp_name" on "db_name" duration 3w replication 1 default# rp_name:策略名;
# db_name:具体的数据库名;
# 3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期);
# replication 1:副本个数,一般为1就可以了;
# default:设置为默认策略# 修改Retention Policies
alter retention policy "rp_name" on "db_name" duration 30d default# 删除Retention Policies
drop retention policy "rp_name" on "db_name"注:
# 策略这个关键词“POLICY”在使用时应该大写,小写会出粗。
# 当一个表使用的策略不是默认策略时,在进行操作时一定要显式的指定策略名称,否则会出现错误。
- 连续查询(Continuous Queries)
# 当数据超过保存策略里指定的时间之后就会被删除,但是这时候可能并不想数据被完全删掉,怎么办?
# influxdb提供了连续查询,可以做数据统计采样。
# InfluxDB的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 SELECT 关键词和 GROUP BY time() 关键词。
# 查看数据库的Continous Queries
show continuous queries# 创建新的Continous Queries
create continous query cq_name on db_name begin select sum(count) into new_table_name from table_name group by time(30m) end# cq_name:连续查询名
# group by time(30m) 每三十分钟取一个 sum(count)
# InfluxDB会将查询结果放在指定的数据表中:new_table_name# 删除Continous Queries
drop continous query cp_name on db_name
添加用户认证
- 首先创建一个admin用户
# 显示用户
SHOW USERS# 创建用户
CREATE USER "username" WITH PASSWORD 'password'# 创建管理员权限的用户
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES# 修改用户(密码)
SET PASSWORD FOR "username" = 'new_password'# 删除用户
DROP USER "username"
-
默认情况下,认证在配置文件是禁用的
需要在配置文件里把 [http] 下的 auth-enabled 选项设置为 true 。
-
重启 influxd
进入influx : influx -username username -password password