1、为什么使用InfluxDB?
1)由Go写成,具有高性能地查询与存储时序型数据的功能;数据需要存储字符数据,目前使用的openTSDB数据库暂时不支持;另外openTSDB不支持uid动态删除或增加,写满1600w时间线后需要重新申请集群,换数据库。
2)关系型数据库与InfluxDB之间的区别
InfluxDB是一个时间序列数据库,主要存储的是以时间为序存储的数据。其实,SQL数据库是可以提供时序的功能,只要将时间作为主键,就能够将SQL数据库当作时序数据库来处理。简而言之,InfluxDB用于存储大量的时间序列数据,并对这些数据进行快速的实时分析。而SQL数据库虽然可以有时序的功能,但是效率并不高。
3)InfluxDB的模式schema是可以随时改变的,便于后期扩展监控指标
在InfluxDB中,时间戳(timestamp)标识了在任何给定数据中的单个点。可以理解为,有一个表其中主键是由系统预先设置的,主键永远是时间戳。
InfluxDB的模式schema是可以随时改变的。在InfluxDB中,不需要事先定义schema。可以任何时候,插入不同的数据。但是必须要有时间,MySQL不行,你需要事项定义模式,而且不是随时可以改变的。
2、InfluxDB基本概念
database | 数据库 |
field set | fields由field key和field value组成,一般存放的是具体的时序数据,即随着时间戳的变化而变化的数据,与标签不同的是,未对指标数据创建索引。 |
field key | 组成field的键值对里面的键的部分。field key是字符串且保存在metadata中。 |
field value | 数据点上field key和field value的集合。 |
measurement | measurement作为tag,fields和time列的容器,measurement的名字是存储在相关fields数据的描述。measurement的名字是字符串,对于一些SQL用户,measurement在概念上类似于表。 |
point | point就是具有相同timestamp的相同series的field集合。表示一条具体的时序数据记录,由时序(Series)和时间戳(Timestamp)唯一标识,类似于MySQL中的一行记录。 |
retention policy | 单个measurement可以有不同的retention policy。 retention policy描述了InfluxDB保存数据的时间(DURATION)以及这些存储在集群中数据的副本数量(REPLICATION)。 保留策略,用于决定要保留多久的数据,保存几个备份,以及集群的策略等。 定义InfluxDB的数据保留时长和数据存储的副本数,通过设置合理的保存时间(Duration) 和副本数(Replication),在提升数据存储可用性的同时,避免数据爆炸。 |
series | 在InfluxDB中,series是retention policy,measurement和tag set的集合。 以上数据由四个series组成。表示表名、保留策略、标签集都相同的一组数据 |
tag set | tag set是不同的每组tag key和tag value的集合,tag由tag key和tag value组成。如“host=server01”和“location=cn-sz”,用于创建索引,提升查询性能。 一般存放的是标示数据点来源的属性信息,host和location分别是表中的两个标签键,对应的标签值分别为server01和cn-sz。 |
tag key | key值 |
tag value | key对应的value值 |
timestamp | 表示数据生成时的时间戳,可以自己定义 |
3、确定存储容量:
4、确定表结构
①确定field和tag:
原则:
如果要对其使用GROUP BY(),也要放在tag中(GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组)
出现在where条件中,此时可以使用tag类型来保存此值
如果你要对其使用InfluxQL函数,则将其放到field中
如果你需要存储的值不是字符串,则需要放到field中,因为tag value只能是字符串
不要把多条信息放到一个tag里面
查询内存:影响内存的最主要的因素是series基数,series的基数大约或是超过千万时,就算有更多的内存也可能导致OOM(内存溢出问题),所以在设计数据的格式的时候需要考虑到这一点。内存的增长和series的基数存在一个指数级的关系
5、确定节点规格
1)数据类型:查询时,可以进行数据转换:float->int;但string->float/int不可以。
Data exploration using InfluxQL | InfluxDB OSS 1.7 Documentation
2)查询模型:不同查询模型的差异很大,最好结合业务测试下,查询越精确,时延越小,最好是单时间线查询
官网查询测试数据:
https://support.huaweicloud.com/pwp-nosql/nosql_pwp_0013.html#section1
测试方法:时间线1W、数据量4000W
https://support.huaweicloud.com/pwp-nosql/nosql_pwp_0012.html
3)查询方式:
可以Group by time,对数据按照时间进行聚合:InfluxQL Continuous Queries | InfluxDB OSS 1.7 Documentation
各种算子可以满足我们的业务查询场景:InfluxQL functions | InfluxDB OSS 1.7 Documentation
4)influxdb采样和数据保留:Downsampling and data retention | InfluxDB OSS 1.7 Documentation
参考资料:
(官网)Hardware sizing guidelines | InfluxDB OSS 1.7 Documentation
(中文文档)安装influxdb的硬件要求 - 举个例子网
(华为官网)什么是GaussDB(for Influx)_云数据库 GaussDB NoSQL _GaussDB(for Influx)_引擎简介_华为云