在 InfluxDB 中,咱们能够粗略的将要存入的一条数据看做一个虚拟的 key 和其对应的 value(field value)。格式以下:redis
cpu_usage,host=server01,region=hn-zhengzhou value=0.64 1434055562000000000
虚拟的 key 包括如下几个部分: database, retention policy, measurement, tag sets, field name, timestamp。shell
points至关于关系数据库中的行,Point由时间戳(time)、数据(field)、标签(tags)组成。数据库
Series 至关因而 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。命令行
InfluxDB 的数据存储主要有三个目录。默认状况下是 meta, wal 以及 data 三个目录。meta 用于存储数据库的一些元数据,meta 目录下有一个 meta.db 文件。wal 目录存放预写日志文件,以 .wal 结尾。data 目录存放实际存储的数据文件,以 .tsm 结尾。日志
InfluxDB提供多种操做方式:code
influx Connected to http://localhost:8086 version 1.2.4 InfluxDB shell version: 1.2.4
show databases;
create database cpu_info;
use cpu_info;
drop database cpu_info;
在InfluxDB当中,并无表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,所以咱们也能够将MEASUREMENTS称为InfluxDB中的表server
show measurements
InfluxDB中没有显式的新建表的语句,只能经过insert数据的方式来创建新表。排序
insert disk_free,hostname=server01 value=442221834240i
其中 disk_free 就是表名,hostname是索引(tag),value=xx是记录值(field),记录值能够有多个,系统自带追加时间戳。或者添加数据时,本身写入时间戳索引
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
drop measurement disk_free
influxDB是没有提供直接删除数据记录的方法,可是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。
show retention policies on cpu_info; name duration shardGroupDuration replicaN default ---- -------- ------------------ -------- ------- autogen 0s 168h0m0s 1 true
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
alter retention policy "rp_name" on "db_name" duration 30d default
drop retention policy "rp_name" on "db_name"
InfluxDB的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 SELECT 关键词和 GROUP BY time() 关键词。InfluxDB会将查询结果放在指定的数据表中。
使用连续查询是最优的下降采样率的方式,连续查询和存储策略搭配使用将会大大下降InfluxDB的系统占用量。并且使用连续查询后,数据会存放到指定的数据表中,这样就为之后统计不一样精度的数据提供了方便。
新建连续查询语法以下:
CREATE CONTINUOUS QUERY <cq_name> ON <database_name> [RESAMPLE [EVERY <interval>] [FOR <interval>]] BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement> FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>] END
样例:
CREATE CONTINUOUS QUERY wj_30m ON shhnwangjian BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END
在shhnwangjian库中新建了一个名为 wj_30m 的连续查询,每三十分钟取一个connected_clients字段的平均值、中位值、最大值、最小值 redis_clients_30m 表中。使用的数据保留策略都是 default。
SHOW CONTINUOUS QUERIES
DROP CONTINUOUS QUERY <cq_name> ON <database_name>