influxDB简单学习


学习一下InfluxDB

InfluxDB学习之InfluxDB的基本概念

InfluxDB中文文档 (gitbooks.io)

重要特性

  • 极简架构:单机版的InfluxDB只需要安装一个binary,即可运行使用,完全没有任何的外部依赖。
  • 极强的写入能力: 底层采用自研的TSM存储引擎,TSM也是基于LSM的思想,提供极强的写能力以及高压缩率。
  • 高效查询:对Tags会进行索引,提供高效的检索。
  • InfluxQL:提供SQL-Like的查询语言,极大的方便了使用,数据库在易用性上演进的终极目标都是提供Query Language。
  • Continuous Queries: 通过CQ能够支持auto-rollup和pre-aggregation,对常见的查询操作可以通过CQ来预计算加速查询。

1. 基本概念

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

influxDB中的名词 传统数据库中的概念
database 数据库
measurement 数据库中的表
points 表里面的一行数据

二、InfluxDB中独有的概念

1)Point

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

Point相当于传统数据库里的一行数据,如下表所示:

Point属性 传统数据库中的概念
time 每个数据记录时间,是数据库中的主索引(会==自动生成==)
fields 各种记录值(==没有索引==的属性)也就是记录的值:温度, 湿度
tags 各种==有索引==的属性:地区,海拔(相当于要通过这个进行筛选查询?)
特别提醒:
  1. ==time 相当于表的主键==,当一条数据的time和tags完全相同时候,新数据会替换掉旧数据,旧数据则丢失(线上环境尤其要注意)。

  2. tags 和time可以作为排序字段,field则不可以。如:ORDER BY time DESC

  3. fields和tags的字段类型是由存入的第一条记录值决定的。

    举例:
    如第一条记录fieldA的值为2,想插入一条记录,fieldA字段值为3.14的值,就会报错。因为该字段已经被初始化为整型了。
    如第一条记录fieldB存储的是3,想插入一条记录,fieldB字段值为hello,则也会报错,该字段已被初始化成整型,不能再写入字符串了。

  4. 建议只使用字符串类型和浮点类型,把所有的整型,长整型,浮点型,双精度型统一转为小数格式的浮点类型,再写入数据库,字符串类型的不用做转换,这样就不会出现插入数据失败和丢失数据了。

2)series

所有在数据库中的数据,都需要通过==图表来展示==,而这个series表示这个表里面的数据,可以==在图表上画成几条线==:通过tags排列组合算出来。

如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
>show series from cpu
key
cpu,cpu=cpu-total,host=ResourcePool-0246-billing07
cpu,cpu=cpu-total,host=billing07
cpu,cpu=cpu0,host=ResourcePool-0246-billing07
cpu,cpu=cpu0,host=billing07
cpu,cpu=cpu1,host=ResourcePool-0246-billing07
cpu,cpu=cpu1,host=billing07
cpu,cpu=cpu10,host=ResourcePool-0246-billing07
cpu,cpu=cpu10,host=billing07
cpu,cpu=cpu11,host=ResourcePool-0246-billing07
cpu,cpu=cpu11,host=billing07
cpu,cpu=cpu12,host=ResourcePool-0246-billing07
cpu,cpu=cpu12,host=billing07
cpu,cpu=cpu13,host=ResourcePool-0246-billing07
cpu,cpu=cpu13,host=billing07
cpu,cpu=cpu14,host=ResourcePool-0246-billing07
cpu,cpu=cpu14,host=billing07
cpu,cpu=cpu15,host=ResourcePool-0246-billing07
cpu,cpu=cpu15,host=billing07
cpu,cpu=cpu16,host=ResourcePool-0246-billing07
cpu,cpu=cpu17,host=ResourcePool-0246-billing07
cpu,cpu=cpu18,host=ResourcePool-0246-billing07
cpu,cpu=cpu19,host=ResourcePool-0246-billing07
cpu,cpu=cpu2,host=ResourcePool-0246-billing07
cpu,cpu=cpu2,host=billing07
cpu,cpu=cpu20,host=ResourcePool-0246-billing07
cpu,cpu=cpu21,host=ResourcePool-0246-billing07
cpu,cpu=cpu22,host=ResourcePool-0246-billing07
cpu,cpu=cpu23,host=ResourcePool-0246-billing07
cpu,cpu=cpu3,host=ResourcePool-0246-billing07
cpu,cpu=cpu3,host=billing07
cpu,cpu=cpu4,host=ResourcePool-0246-billing07
cpu,cpu=cpu4,host=billing07
cpu,cpu=cpu5,host=ResourcePool-0246-billing07
cpu,cpu=cpu5,host=billing07
cpu,cpu=cpu6,host=ResourcePool-0246-billing07
cpu,cpu=cpu6,host=billing07
cpu,cpu=cpu7,host=ResourcePool-0246-billing07
cpu,cpu=cpu7,host=billing07
cpu,cpu=cpu8,host=ResourcePool-0246-billing07
cpu,cpu=cpu8,host=billing07
cpu,cpu=cpu9,host=ResourcePool-0246-billing07
cpu,cpu=cpu9,host=billing07

2.基本操作

InfluxDB提供类SQL语法,如果熟悉SQL的话会非常容易上手。

一、InfluxDB操作方式

InfluxDB提供三种操作方式:

1)客户端命令行方式

2)HTTP API接口

3)各语言API库

今天主要以命令行为例,为大家介绍下InfluxDB的基本操作,HTTP API接口和各种语言API库会在以后的文章中为大家详细介绍。

二、InfluxDB数据库操作

与sql一样,以下是查增删用

1
2
3
4
> show databases
> create database test
> drop database test
> use xk_name

三、InfluxDB数据表操作

在InfluxDB当中,并没有表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表

1)显示所有表

1
> SHOW MEASUREMENTS

2)新建表

InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。如下所示:

1
2
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
# insert 表名,索引=xxx,索引2=xxx value1=记录值1,value2= time

其中 disk_free 就是表名,hostname是索引,value=xx是记录值,记录值可以有多个,最后是指定的时间。

执行后结果如下

1
2
3
4
5
> select * from disk_free
name: disk_free
---------------
time hostname value
1435362189575692182 server01 442221834240

以我们的数据来进行类比:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"Serial": 123456, // 设备编号 # 索引
"UploadTime": "2021-01-10 14:24:41", // 上传时间 # 索引
"GasType": "VOC", // 气体类型 # 索引
"DataNum": 2, // 数据条数 # ???
"Rssi": 30, // 信号值,网络信号 # ???
"Datas": [{ // 每条数据的集合 # 记录值
"Data": 0, // 数据值 # value
"DateTime": "2021-01-10 14:21:00", // 数据时间 # time
"Flw": "㎎/m³", // 数据单位 # value
"State": 1, // 状态 # value
"StateDetail": "正常" // 状态名称 # value
}, {
"Data": 0,
"DateTime": "2021-01-10 14:24:00",
"Flw": "㎎/m³",
"State": 1,
"StateDetail": "正常"
}]
}
1
insert testiii,Serial=222222,GasType=VOC Data=0.565,State=2i,StateDetail="高报",Flw="mg/m3",Rssi=30

3)查询要注意时区:

1
select * from disk where time >= '2018-11-23 14:30:39' and time <= '2018-11-23 14:32:32' tz('Asia/Shanghai')

按照北京时间查询

Windows环境下需要安装GO语言,然后重启。


文章作者: SongX64
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 SongX64 !
  目录