目录
1.2创建数据库——Create database test
前言
InfluxDB(时序数据库),常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使用情况,然后就可以根据统计的数据,利用图形化界面(InfluxDB V1一般配合Grafana)制作内存使用情况的折线图;可以理解为按时间记录一些数据(常用的监控数据、埋点统计数据等),然后制作图表做统计。
InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计和实时分析变得十分方便,适合用于包括DevOps监控,应用程序指标,物联网传感器数据和实时分析的后端存储。类似的数据库有Elasticsearch、Graphite等。
一、什么是InfluxDB
1.定义
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
2.特性
2.1特性
- Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)
- Metrics(度量):你可以实时对大量数据进行计算
- Eevents(事件):它支持任意的事件数据
2.2特点
- 为时间序列数据专门编写的自定义高性能数据存储。 TSM引擎具有高性能的写入和数据压缩
- Golang编写,没有其它的依赖
- 提供简单、高性能的写入、查询 http api,Native HTTP API, 内置http支持,使用http读写
- 插件支持其它数据写入协议,例如 graphite、collectd、OpenTSDB
- 支持类sql查询语句
- tags可以索引序列化,提供快速有效的查询
- Retention policies自动处理过期数据
- Continuous queries自动聚合,提高查询效率
- schemaless(无结构),可以是任意数量的列
- Scalable可拓展
- min, max, sum, count, mean,median 一系列函数,方便统计
- Built-in Explorer 自带管理工具
3.对常见关系型数据库(Mysql)基础概念的对比
概念 | Mysql | InfluxDB |
---|---|---|
数据库 | Database | Database |
表 | Table | Measurement |
列 | Column | Tag(带索引的,非必须)、field(不带索引)、timestemp(唯一主键) |
InfluxDB时序数据库的名词:
- database:数据库;
- measurement:数据库中的表;
- points:表里面的一行数据。
- influxDB中独有的一些概念:Point由时间戳(time)、数据(field)和标签(tags)组成。
Point属性 | 传统数据库 |
---|---|
Time(时间戳) | 每个数据记录时间,是数据库中的主索引(会自动生成) |
Fields(字段、数据) | 各种记录值(没有索引的属性)也就是记录的值:温度、湿度 |
Tags(标签) | 各种有索引的属性:地区、海拔 |
在influxdb中,字段必须存在。因为字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。
tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型。
还有一个重要的名词:series
所有在数据库中的数据,都需要通过图表来表示,series(系列)表示这个表里面的所有的数据可以在图标上画成几条线(注:线条的个数由tags排列组合计算出来)
4.注意点
- tag 只能为字符串类型
- field 类型无限制
- 不支持join
- 支持连续查询操作(汇总统计数据):CONTINUOUS QUERY
- 配合Telegraf服务(Telegraf可以监控系统CPU、内存、网络等数据)
- 配合Grafana服务(数据展现的图像界面,将influxdb中的数据可视化)
5.常用的InfluxQL
-- 查看所有的数据库
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;
6.InfluxDB系统架构
每个database 可以有多个RP(retention policy数据保存策略),但是只有一个默认策略。策略下按照时间段分为多个ShardGroup,每个ShardGroup存储一个时间段的数据。每个shardgroup下分多个shard来存储数据。
二、InfluxDB Java Demo
1.InfluxDB安装
Windows下载地址:
64bit:https://dl.influxdata.com/influxdb/releases/influxdb-1.7.4_windows_amd64.zip chronograf:https://dl.influxdata.com/chronograf/releases/chronograf-1.7.8_windows_amd64.zip
2.Linux下载安装并启动InfluxDB
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm
yum -y localinstall influxdb-1.7.8.x86_64.rpm
cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.default
systemctl enable --now influxdb
三、InfluxDB基本操作
1.数据操作
1.1显示数据库——Show databases
_internal
数据库是用来存储InfluxDB内部的实时监控数据的。
1.2创建数据库——Create database test
1.3删除数据库——Drop database test
1.4使用指定数据库——use test
2.数据表操作
在 InfluxDB 当中,并没有表(table)这个概念,取而代之的是 MEASUREMENTS,MEASUREMENTS 的功能与传统数据库中的表一致,因此我们也可以将 MEASUREMENTS 称为InfluxDB 中的表。
2.1显示所有表——SHOW MEASUREMENTS
2.2新建表——Insert
InfluxDB 中没有显式的新建表的语句,只能通过 insert 数据的方式来建立新表。
insert cpu,host=serverA,region=us_west value=0.64
#其中 cpu 就是表名,host、region 是索引(tags),value=xx是记录值(fields),记录值可以有多个,系统自动追加时间戳
2.3查询表数据——select * from cpu
执行 precision rfc3339 更换为国际时间,与北京时间相差8小时
2.4删除表——Drop measurement name
3.数据保存策略(Retention Policies)
InfluxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。(设置类似于定期清理的语句)
3.1保留策略语法
CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
<retention_policy_name>:保留策略的名称(自定义)
<database_name>:为哪个数据库创建保留策略
<duration>:该保留策略对应的数据过期时间
REPLICATION:副本因子 SHARD DURATION:分片组的默认时长
[DEFAULT]:是否为默认策略
3.2创建数据保留策略
CREATE RETENTION POLICY "influx_retention" ON "mydb" DURATION 30d REPLICATION 1 DEFAULT
influx_retention:策略名;
mydb:具体的数据库名;
30d:保存30天,30天之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期/周);
replication 1:副本个数,一般为1就可以了;
default:设置为默认策略
3.3查看保留期
SHOW RETENTION POLICIES ON mydb
3.4修改保留期
ALTER RETENTION POLICY "influx_retention" ON mydb DURATION 15d
3.5删除保留期
DROP RETENTION POLICY "influx_retention" ON mydb
4.用户操作
4.1显示用户
4.2创建用户
CREATE USER cxk WITH PASSWORD '123'
#创建普通用户并设置密码
create user "wyb" with password '123' with all privileges
##创建普通用户并予以授权
4.3修改用户密码
SET PASSWORD FOR cxk = '123456'
4.4删除用户
drop user cxk
5.数据库访问权限
5.1用户授权
#授权用户数据库操作权限
GRANT ALL PRIVILEGES ON influxdb TO cxk
#赋予用户管理员权限
GRANT ALL PRIVILEGES TO wyb
#只能使用admin权限才可以操作数据库
5.2撤销授权
#撤销用户数据库操作权限
Revoke ALL PRIVILEGES ON influxdb FROM cxk
#撤销用户管理员权限
Revoke ALL PRIVILEGES FROM wyb
四、InfluxDB开启用户登录验证
1.开启登录验证
#在influxdb配置文件influxdb.conf中,开启用户登录认证,在http模块修改如下内容:
vim /etc/influxdb/influxdb.conf
[http]
······
-259行- auth-enabled = true
systemctl restart influxd
# 修改完配置文件后需要重启
# 在Windows 中 则可以 在任务管理器中 重新启动influxdb服务
修改用户权限时需要重新修改配置文件为 auth-enabled = false 才可进行操作