InfluxDB基本知识总结
基本概念
InfluxDB:是一个用于存储和分析时间序列数据的开源数据库,go语言写的。
database: 数据库名,在 InfluxDB 中可以创建多个数据库,不同数据库中的数据文件是隔离存放的,存放在磁盘上的不同目录。
measurement: 测量指标名,measurement是字符串,类似于MySQL中的表名。
point:代表一条记录 类似于MySQL中的一行数据。
tags:标签由tag key和tag value组成。Tags 在 InfluxDB 中会被建立索引,且放在内存中。如果某种数据经常用来被作为查询条件,可以考虑设为Tag(类似于MySQL数据库里索引的列)
fields:字段由field key和field value组成,field key是字符串且保存在metadata中。field value才是真正的数据,可以是字符串,浮点数,整数,布尔型数据。是查询的主要对象,例如value值等,在influxdb中,字段必须存在。注意,字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于MySQL的没有索引的列。
time:InfluxDB中的所有数据都有该列。时间戳19位 纳秒级
retention policy: 存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,
Continuous Query(CQ):连续查询 是在数据库内部自动周期性跑着的一个InfluxQL的查询,CQs需要在SELECT语句中使用一个函数,并且一定包括一个GROUP BY time()语句。
Series:在同一个database中,相同retention policy、相同measurement、相同tag的数据属于一个series集合,标识这条数据来自哪里,同一个series的数据在物理上按照时间顺序排列在一起。InfluxDB会在系统上为每个series维护一个内存索引, 而随着这些series的增加,RAM内存使用率也会增加。
增删改查
1 增加
可以使用insert,也可以使用HTTP接口,使用post请求。例如
curl -i -XPOST ‘http://localhost:8086/write?db=mydb’ --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000’
Insert:
INSERT cpu,host=serverA,region=us_west value=0.64
cpu为measurement,tag是host和region,value是field,多组tag或field需要用不带空格的,隔开,如果想自定义时间 只需要在最后加个空格,然后加入时间戳
measurement,tag keys,tag values,field keys始终是字符串。
Field value可以是整数、浮点数、字符串和布尔值:默认是浮点型,想要是整数在数字后加i,字符串加双引号,
布尔型 —— 表示TRUE可以用t,T,true,True,TRUE;表示FALSE可以用f,F,false,False或者FALSE:
2 删除
1 删除数据库
DROP DATABASE从指定数据库删除所有的数据,以及measurement,series,continuous queries, 和retention policies
2 用DROP从索引中删除series
DROP SERIES删除一个数据库里的一个series的所有数据,并且从索引中删除series。
3 用DELETE删除series
DELETE删除数据库中的measurement中的所有点。与DROP SERIES不同,它不会从索引中删除series
4 删除measurement
DROP MEASUREMENT删除指定measurement的所有数据和series,并且从索引中删除measurement。
3 修改
Influxdb没有专门的update语句,但可以使用insert 只要time及tag相同,就会替换原有数据
4 查询
查询 可以使用select语句,也可以使用HTTP接口查询数据
通过发送一个GET请求,并设置URL的db参数为目标数据库,设置URL参数q为查询语句。
例如:
curl -G ‘http://localhost:8086/query?pretty=true’ --data-urlencode “db=mydb” --data-urlencode "q=SELECT “value” FROM “cpu_load_short” WHERE “region”='us-west’”
使用select语句:大部分和MySQL时一样,但有几点需要注意
1返回特定的field和tag,SELECT在包括一个tag时,必须至少指定一个field。
2我们可以使用以下语句从完全特定的measurement中查询数据。
比如:SELECT * FROM “NOAA_water_database”.“autogen”."h2o_feet“
NOAA_water_database为数据库名,autogen为存储策略,h2o_feet为measurement。
3对于WHERE子句返回结果为空的情况,这个问题是tag value或field value缺少单引号的结果。具有无引号或双引号tag value或field value的查询将不会返回任何数据,并且在大多数情况下不会返回错误。