学习一下InfluxDB
重要特性
- 极简架构:单机版的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 | 各种==有索引==的属性:地区,海拔(相当于要通过这个进行筛选查询?) |
特别提醒:
==time 相当于表的主键==,当一条数据的time和tags完全相同时候,新数据会替换掉旧数据,旧数据则丢失(线上环境尤其要注意)。
tags 和time可以作为排序字段,field则不可以。如:
ORDER BY time DESCfields和tags的字段类型是由存入的第一条记录值决定的。
举例:
如第一条记录fieldA的值为2,想插入一条记录,fieldA字段值为3.14的值,就会报错。因为该字段已经被初始化为整型了。
如第一条记录fieldB存储的是3,想插入一条记录,fieldB字段值为hello,则也会报错,该字段已被初始化成整型,不能再写入字符串了。建议只使用字符串类型和浮点类型,把所有的整型,长整型,浮点型,双精度型统一转为小数格式的浮点类型,再写入数据库,字符串类型的不用做转换,这样就不会出现插入数据失败和丢失数据了。
2)series
所有在数据库中的数据,都需要通过==图表来展示==,而这个series表示这个表里面的数据,可以==在图表上画成几条线==:通过tags排列组合算出来。
如下所示:
1 | >show series from cpu |
2.基本操作
InfluxDB提供类SQL语法,如果熟悉SQL的话会非常容易上手。
一、InfluxDB操作方式
InfluxDB提供三种操作方式:
1)客户端命令行方式
2)HTTP API接口
3)各语言API库
今天主要以命令行为例,为大家介绍下InfluxDB的基本操作,HTTP API接口和各种语言API库会在以后的文章中为大家详细介绍。
二、InfluxDB数据库操作
与sql一样,以下是查增删用
1 | > show databases |
三、InfluxDB数据表操作
在InfluxDB当中,并没有表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表。
1)显示所有表
1 | > SHOW MEASUREMENTS |
2)新建表
InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。如下所示:
1 | insert disk_free,hostname=server01 value=442221834240i 1435362189575692182 |
其中 disk_free 就是表名,hostname是索引,value=xx是记录值,记录值可以有多个,最后是指定的时间。
执行后结果如下
1 | > select * from disk_free |
以我们的数据来进行类比:
1 | { |
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语言,然后重启。