文章目录
- InfluxDB 使用手册
- 一、InfluxDB简介
- 1.InfluxDB是什么
- 二、InfluxDB基础概念
- 1.Database
- 2.Measurement
- 3.Point
- 4.Series
- 5.tag sets
- 6.Retention policy
- 7.Shard Group
- 8.Shard
- 三、InfluxDB基础操作
- 1.数据库命令
- 2.新增数据命令
- 3.查询数据命令
- 4.用户命令
- 5.保留策略命令
InfluxDB 使用手册
一、InfluxDB简介
1.InfluxDB是什么
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
二、InfluxDB基础概念
1.Database
数据库名,在 InfluxDB 中可以创建多个数据库,不同数据库中的数据文件是隔离存放的,存放在磁盘上的不同目录。
2.Measurement
类似于Mysql中的表。
3.Point
类似于Mysql表中的一行数据。point的数据结构由时间戳(time)、标签(tags)、数据(fields)三部分组成,具体含义如下:
Point属性 | 含义 |
time | 数据记录的时间,是主索引(自动生成) |
tags | 各种有索引的属性 |
fields | 各种value值,没有索引的属性 |
Point属性 含义
time 数据记录的时间,是主索引(自动生成)
tags 各种有索引的属性
fields 各种value值,没有索引的属性
在InfluxDB中,tag是一个非常重要的部分,表名+tag一起作为数据库的索引,是“key-value”的形式。
4.Series
Series 相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。InfluxDB在存储数据时,是根据series(即measurement与tag set的一个唯一组合)的哈希值来决定落在哪个Shard中的,哈希分桶数——即Shard的数目——在商用版中可以调整。这样就使得series相同的数据落在相同的Shard里,有利于提高查询效率。同时也会使一个Shard中可能包含多个measurement的数据(相对地,一个HBase Region只会包含一张表的数据),有利于负载均衡。
5.tag sets
tags 在 InfluxDB 中会按照字典序排序,不管是 tagkey 还是 tagvalue,只要不一致就分别属于两个 key,例如 host=server01,region=us-west 和 host=server02,region=us-west 就是两个不同的 tag set。
6.Retention policy
存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据。
7.Shard Group
Shard Group是一个逻辑概念,顾名思义,它就是包含多个Shard的组合。Shard Group的重要特性是时间分区性,即每个Shard Group只会存储一段时间内的数据,各个Shard Group对应的时间区间不会交叉。时序数据库上的查询几乎全都会带有时间维度的过滤条件,Shard Group按时间区间的组织形式可以很高效地实现partition pruning,另外也方便下文所说的数据过期。
8.Shard
Shard 在 InfluxDB 中是一个比较重要的概念,它和 retention policy 相关联,类似于HBase的Region和Kudu的Tablet,是数据编码、存储、写入和读取的交互单元。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 Cache、WAL、TSM File。具体解释如下:
TSM 存储引擎主要由几个部分组成: cache、wal、tsm file、compactor。
WAL:预写日志,相当于HLog
Cache:写缓存,相当于MemStore
TSM File:数据存储文件,相当于HFile
TSI/TSI File:内存中的倒排索引及磁盘上的索引文件,方便查询
Compaction:主要进行两种操作,一种是 cache 数据达到阀值后,进行快照,生成一个新的 tsm 文件。另外一种就是合并当前的 tsm 文件,将多个小的 tsm 文件合并成一个,减少文件的数量,并且进行一些数据删除操作。 这些操作都在后台自动完成,一般每隔 1 秒会检查一次是否有需要压缩合并的数据。
InfluxDB存储体系图
三、InfluxDB基础操作
1.数据库命令
创建数据库
create database “db_name”
显示所有的数据库
show databases
删除数据库
drop database “db_name”
使用数据库
use db_name
显示该数据库中所有的表
show measurements
创建表,直接在插入数据的时候指定表名
//创建test表,host和monitor_name为tag,count为fields
insert test,host=127.0.0.1,monitor_name=test count=1
删除表
drop measurement “measurement_name”
2.新增数据命令
新增数据
//新增一条数据,measurement为add_test, tag为name,phone, field为user_id,email
insert add_test,name=YiHui,phone=110 user_id=20,email=“bangzewu@126.com”
新增数据
新增数据带上保存策略和时间戳
//前面写入数据没有指定保存策略,表示这条数据写入到默认的保存策略中;一个数据库可以有多个保存策略,一个measurement中也可以存不同的保存策略的数据,在写入数据时,如果需要指定保存策略,可以使用 insert into 保存策略 …
//当写入数据不指定时间时,会自动用当前时间来补齐,如果需要自己指定时间,再最后面添加上即可,注意时间为ns
//新增一条数据,保存策略为1_d,measurement为add_test, tag为name,phone, field为user_id,email,age,boy 时间戳为1564150279123000000
insert into “1_d” add_test,name=YiHui2,phone=911 user_id=23,email=“bangzewu@126.com”,age=18i,boy=true 1564150279123000000
新增数据
新增数据语法:insert into measurement,tagKey=tagValue fieldKey=fieldValue timestamp
总结:
(1)insert + measurement + “,” + tag=value,tag=value + + field=value,field=value
(2)tag与tag之间用逗号分隔;field与field之间用逗号分隔
(3)tag与field之间用空格分隔field
(4)可以没有tag,但是不能没有
(5)根据前面的说明已经实测,可以
(6)tag都是string类型,不需要引号将value包裹
(7)field如果是string类型,需要加引号
(8)field有四种类型,int, float, string, boolean
field类型
类型 | 方式 | 示例 |
Int | 数字i | age=18i |
Float | 数字 | user_id=21 |
Boolean | true/false | boy=true |
String | “” or ‘’ | email=“111@163.com” |
删除数据
无删除数据,只能使用数据保存策略删除数据
3.查询数据命令
查询数据
//简单查询
SELECT * FROM device WHERE time > now() - 5m
查询数据
//add_test表内1_d的保存策略数据查询
select * from “1_d”.add_test;
//查询条件,分类,排序,只取一条数据,时间本地化
SELECT * FROM %s WHERE time > now() - 10m group by sn ORDER BY time DESC limit 1 tz(‘Asia/Shanghai’)
//双引号和单引号意义不同,InfluxDB区分严格
SELECT * FROM %s WHERE time > now() - 3m AND sn = ‘test_topic_jmeter002’ ORDER BY time DESC LIMIT 1 tz(‘Asia/Shanghai’)
//offset 100 从第101条数据开始取 加上limit限制完成分页
SELECT * FROM %s WHERE sn = ‘%s’ AND time >= ‘%s’ AND time <= ‘%s’ ORDER BY time DESC LIMIT %d offset %d tz(‘Asia/Shanghai’)
//查询总条数
SELECT COUNT(字段) FROM %s WHERE sn = ‘%s’
连续查询(Continous Queries)
当数据超过保存策略里指定的时间之后就会被删除,但是这时候可能并不想数据被完全删掉,influxdb提供了连续查询,可以做数据统计采样。
//查看数据库的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>:连续查询名字;
<db_name>:数据库名字;
<sum(count)>:计算总和;
<table_name>:当前表名;
<new_table_name>:存新的数据的表名;
<30m>:时间间隔为30分钟
//删除Continous Queries
drop continous query cp_name on db_name
4.用户命令
显示用户
show users
创建用户
create user “username” with password ‘password’
创建管理员权限用户
create user “username” with password ‘password’ with all privileges
删除用户
drop user “username”
5.保留策略命令
查询保留策略
SHOW RETENTION POLICIES ON db_name
#新建策略
//在 mydb库添加了一个24小时的策略,名字叫做 def_new , duration为24小时,副本为1,若要直接定义为默认加上关键字DEFAULT
CREATE RETENTION POLICY “def_new” ON mydb DURATION 24h REPLICATION 1(DEFAULT)
新建保存策略语法:
CREATE RETENTION POLICY <retention_policy_name> ON <database_name>
DURATION
REPLICATION <replication_num>
[SHARD DURATION <shard_duration>] [DEFAULT]
其中:
<retention_policy_name>是保留策略的名称;
<database_name>是数据库的名称;
是数据的TTL;
<replication_num>是数据的副本数;
<shard_duration>是可选项,表示每个Shard Group的时间区间长度;
DEFAULT也是可选项,如果指定,表示将此策略顺便设为默认。
如果不指定shard duration的话,当duration小于2天时,shard duration默认为1小时;duration介于2天和6个月之间时,shard duration默认为1天;duration大于6个月时,shard duration默认为7天。
系统默认分片时间
//默认的保存策略autogen中的duraiton=0,这里表示这条数据不会被删除。默认的永久保存策略中,有个 shardGroupDuration 参数,为7天,也就是说7天的数据放在一个Shard中,过了之后,新加一个Shard
修改策略
ALTER RETENTION POLICY def_new ON mydb DURATION 48h DEFAULT
删除策略
drop retention POLICY def_new ON mydb