前言:
在前面两讲中,介绍了InfluxDB的安装和使用,这一讲来介绍InfluxDB中数据结构的基本概念,以及使用中要注意问题,。
一. InfluxDB基本数据结构
数据结构 | 含义 |
database | 数据库 |
measurement | 数据库中的表 |
retention policy | 保存策略:让InfluxDB能够知道可以丢弃哪些数据,设置数据自动清除时间,从而更高效的处理数据 |
points | 表里面的一行数据 |
二.points的数据结构介绍:
数据结构 | 含义 |
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
fields | 各种记录值(没有索引的属性)也就是记录的值 |
tags | 各种有索引的属性 |
series | 表示这个表里面的数据,可以在图表上画成几条线:通过tags排列组合算出来。 |
特别提醒:
- time 相当于表的主键,当一条数据的time和tags完全相同时候,新数据会替换掉旧数据,旧数据则丢失(线上环境尤其要注意)。
- tags 和time可以作为排序字段,field则不可以。如:
ORDER BY time DESC
- 设置了保存策略后,若此保存策略为设置成默认保存策略(一个库可以有多个保存策略),则在查询时,表名(measurement)前,要加上保存策略。
举例:
保留策略为two-hour
不是默认保存策略,则查询时候,需要指定其保存策略。
select * from two-hour.measure where time > now() -10
- fields和tags的字段类型是由存入的第一条记录值决定的。
举例:
- 如第一条记录
fieldA
的值为2
,想插入一条记录,fieldA
字段值为3.14
的值,就会报错。因为该字段已经被初始化为整型了。 - 如第一条记录
fieldB
存储的是3
,想插入一条记录,fieldB
字段值为hello
,则也会报错,该字段已被初始化成整型,不能再写入字符串了。
三.如何统一InfluxDB数据类型,防止丢失数据?
建议只使用字符串类型和浮点类型,把所有的整型,长整型,浮点型,双精度型统一转为小数格式的浮点类型,再写入数据库,字符串类型的不用做转换,这样就不会出现插入数据失败和丢失数据了。