文章目录

  • 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操作Java influxdb join_Group


influxdb操作Java influxdb join_Group_02

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”

influxdb操作Java influxdb join_数据库_03

新增数据

新增数据带上保存策略和时间戳
//前面写入数据没有指定保存策略,表示这条数据写入到默认的保存策略中;一个数据库可以有多个保存策略,一个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

influxdb操作Java influxdb join_数据库_04

新增数据

新增数据语法: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

influxdb操作Java influxdb join_数据_05

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

influxdb操作Java influxdb join_数据库_06

查询数据

//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天。

influxdb操作Java influxdb join_Group_07

系统默认分片时间

//默认的保存策略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