influxdb入门

了解influxdb

参考https://www.cnblogs.com/wzbk/p/10569683.html
1、数据格式

在 InfluxDB 中,我们可以粗略的将要存入的一条数据看作一个虚拟的 key 和其对应的 value(field value)。
虚拟的 key 包括以下几个部分: database, retention policy, measurement, tag sets, field name, timestamp。

database: 数据库名,在 InfluxDB 中可以创建多个数据库,不同数据库中的数据文件是隔离存放的,存放在磁盘上的不同目录。
retention policy: 存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据。
measurement: 测量指标名,例如 cpu_usage 表示 cpu 的使用率。InfluxDB数据结果中的一部分,描述了存在关联field中的数据的意义,measurement是字符串。
timestamp: 每一条数据都需要指定一个时间戳,在 TSM 存储引擎中会特殊对待,以为了优化后续的查询操作。

tag sets: 数据点上tag key和tag value的集合。tags 在 InfluxDB 中会按照字典序排序,不管是 tagk 还是 tagv,只要不一致就分别属于两个 key,例如 host=server01,region=us-west 和 host=server02,region=us-west 就是两个不同的 tag set。
tag InfluxDB数据结构中的键值对,tags在InfluxDB的数据中是可选的,但是它们可用于存储常用的metadata。在InfluxDB中,tag是一个非常重要的部分,表名+tag一起作为数据库的索引,是“key-value”的形式。
tag key 组成tag的键值对中的键部分,tag key是字符串,存在metadata中。
tag set数据点上tag key和tag value的集合。

**field **: InfluxDB数据中记录metadata和真实数据的键值对。fields在InfluxDB的数据结构中是必须的且不会被索引。InfluxDB 中支持一条数据中插入多个 fieldName,这其实是一个语法上的优化,在实际的底层存储中,是当作多条数据来存储。
field key: 组成field的键值对里面的键的部分。field key是字符串且保存在metadata中。
**field set **: 数据点上field key和field value的集合。
field value 组成field的键值对里面的值的部分。field value才是真正的数据,可以是字符串,浮点数,整数,布尔型数据。一个field value总是和一个timestamp相关联。field value不会被索引,如果要对field value做过滤话,那就必须遍历所选时间范围里面的所有数据点,这种方式对比与tag效率会差很多。

user 在InfluxDB里有两种类型的用户:
admin用户对所有数据库都有读写权限,并且有管理查询和管理用户的全部权限。
非admin用户有针对database的可读,可写或者二者兼有的权限。
当认证开启之后,InfluxDB只执行使用有效的用户名和密码发送的HTTP请求。

wal(Write Ahead Log)
最近写的点数的临时缓存。为了减少访问永久存储文件的频率,InfluxDB将最新的数据点缓冲进WAL中,直到其总大小或时间触发然后flush到长久的存储空间。这样可以有效地将写入batch处理到TSM中。
可以查询WAL中的点,并且系统重启后仍然保留。在进程开始时,在系统接受新的写入之前,WAL中的所有点都必须flushed。

2、与传统数据库中的名词做比较

influxDB中的名词传统数据库中的概念
database数据库
measurement数据库中的表
points表里面的一行数据
tag相当于有索引的列
field相当于没有索引的列

3、Point

Point由时间戳(time)、数据(field)、标签(tags)组成。

Point相当于传统数据库里的一行数据,如下表所示:
time:每个数据记录时间,是数据库中的主索引(会自动生成)
fields:各种记录值(没有索引的属性)
tags:各种有索引的属性

4、Series

Series 相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起

5、Shard

Shard 在 InfluxDB 中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm 存储引擎,有独立的 cache、wal、tsm file。

安装使用influxdb

下载安装influxdb: 下载链接https://portal.influxdata.com/downloads/
分别有influxdb四大组件TICK
T(Telegraf):服务监控数据采集,包括服务器CPU、内存、IO、进程状态、服务状态等等;
I(InfluxDB):时序型数据库,存储Telegraf采集的监控数据,每条数据都会有time序列;
C(Chronograf):时间序列数据可视化展示,InfluxDB UI界面;
K(Kapacitor):可以按照预先编写好的规则,实时地订阅influxDB数据或者批量查询数据,并进行告警。
在这里插入图片描述

必须下载:influxdb
推荐下载:Chronograf(UI界面)
Telegraf和Kapacitor根据需求自行下载

选择zip文件免安装。

启动influxdb: influxdb下载解压完成后,打开influxd.exe,再打开influx.exe,成功启动。

influx.exe---->influxdb 命令行客户端
influxd.exe---->influxdb服务器
influxdb.conf---->配置文件,指定对应数据存储文件的位置、日志信息、连接数量、连接时间等等功能的具体配置

启动influxdb UI(chronograf) 启动完influxdb后,直接打开chronograf.exe。根据显示的端口号打开本地的UI网页。

简易中文文档:https://jasper-zhang1.gitbooks.io/influxdb/content/Guide/querying_data.html

influxdb sql

建表
CREATE DATABASE "test"

插入数据

注意: 在influxdb中没有专门用来创建measurement的命令,在执行向某个measurement新增记录的时候,如果不存在measurement,则会新创建一个。

//选定数据库
use test

//基本插入语法
insert measurement,tagkey1=tagvalue1,tagkey2=tagvalue2 fieldkey1=fieldvalue1,fieldkey2=fieldvalue2  

// 同类型之间用逗号隔开,先输入的是tag,tag和field用空格隔开。tag有索引,field无索引
//下面的insert语句中,tag是id,field是heartRate和SPO2H
insert runner,id=10001 heartRate=210,SPO2H=97

查询数据

//时间戳输出格式设定为rfc3339
precision rfc3339

//基本查询语法
SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]

//全部查询
select * from measurement
//单独查询
 select "fieldKey"::field, "tagKey"::tag from measurement;

举例:(两条数据举例)

> select * from "runner"
name: runner
time                         SPO2H heartRate id
----                         ----- --------- --
2020-08-26T01:45:43.2549928Z 99    108       10001
2020-08-26T01:46:18.9755029Z 97    210       10001

> select "heartRate"::field, "id"::tag from runner;
name: runner
time                         heartRate id
----                         --------- --
2020-08-26T01:45:43.2549928Z 108       10001
2020-08-26T01:46:18.9755029Z 210       10001

> select "heartRate", "id" from runner;
name: runner
time                         heartRate id
----                         --------- --
2020-08-26T01:45:43.2549928Z 108       10001
2020-08-26T01:46:18.9755029Z 210       10001

按条件查询

//where  查询分tag和field   tag列为字符串,所以在使用是一定要加上单引号  field如果是数字则不用

> select * from "runner" where id='10002'
name: runner
time                         SPO2H heartRate id
----                         ----- --------- --
2020-08-26T02:59:10.5271329Z 100   110       10002

> select * from "runner" where heartRate=108
name: runner
time                         SPO2H heartRate id
----                         ----- --------- --
2020-08-26T01:45:43.2549928Z 99    108       10001

删除
删除操作不推荐在时序型数据库中使用。修改操作同理,因此不再介绍修改操作

> delete from "measurement" where time=1563712849953792293

>

版权声明:本文为PANDORA_A原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。