彻底搞懂时序数据库InfluxDB,在SpringBoot整合InfluxDB

之前介绍了运维监控系统Prometheus,然后就有同鞋问我关于时序数据库的情况,所以这里总结一下时序数据库,并以InfluxDB为例,介绍时序数据库的功能特性和使用方式,希望能对大家有所帮助 。
一、时序数据库概述1.1 什么是时序数据库
时序数据是一组按照时间维度索引的数据 。时序数据在日常生活中随处可见,比如每个整点的温度、湿度等天气数据,每分钟的股票价格数据等 。我们常用曲线图、柱状图等形式去展现时序数据,也就是我们常常听到的“数据可视化” 。
时序数据库是一种非关系型数据库,以时间作为数据主键,专门用来存储时序数据 。
1.2 时序数据库的特点

  • 高压缩比:由于数据每分每秒都在变化,海量的时序数据往往体量巨大,占用大量硬件资源,所以需要优化数据压缩算法提高数据压缩比 。
  • 高并发写入:时序数据库采用持续高并发写入数据,无更新的方式,对于时间相同的重复的数据,只保留一份数据 。
  • 低延时、高并发查询:通过索引降低查询延时,通过缓存等技术提高数据并发能力 。
 
1.3 时序数据库的使用场景
  • IOT行业:电力、化工等工业物联网数据监测
  • 金融行业:各类金融产品及其衍生品、数字货币数据存储与量化研究
  • IT行业:服务器、虚拟机、容器等的状态数据实时监测
  • 互联网行业:用户行为轨迹,日志等数据 。
 
目前比较流行的时序数据库有:InfluxDB、Prometheus、OpenTSDB、TDengine等,其中使用最广泛的当属InfluxDB,行业内应用最广泛 。还有就是刚进入业内视野的国产时序数据库TDengine 。而Prometheus则是Prometheus监控系统自带的数据库 。
二、InfluxDB简介2.1 什么是InfluxDB
InfluxDB 是一个用于存储和分析时间序列数据的开源数据库 。由 Golang 语言编写,也是由 Golang 编写的软件中比较著名的一个,在很多 Golang 的沙龙或者文章中可能都会把 InfluxDB 当标杆来介绍,这也间接帮助 InfluxDB 提高了知名度 。
2.2 InfluxDB的特性
  • 内置 HTTP 接口,使用方便
  • 数据可以打标记,这样查询可以很灵活
  • 类 SQL 的查询语句
  • 安装管理很简单,并且读写数据很高效
  • 能够实时查询,数据在写入时被索引后就能够被立即查出
 
在最新的 DB-ENGINES 给出的时间序列数据库的排名中,InfluxDB 高居第一位,可以预见,InfluxDB 会越来越得到广泛的使用 。
2.3 InfluxDB几个基本概念
时序数据库由于其存储海量时序数据的特性,因此与传统数据库有些许不同,下面先对influxdb中涉及的基本概念作出解释 。
influxdb数据库由database、measurement、point等三部分构成 。分别对应关系数据库中的数据库、表、数据行 。
 
  • database:数据库,同MySQL等关系型数据库中的“数据库Database”
  • measurement:数据表,相当于关系型数据库中的“表Table”
  • point:数据点,表示单条数据记录,相当于关系型数据库中的“一行数据”
 
概念
MySQL
InfluxDB
数据库(同)
database
database
表(不同)
table
measurement(测量; 度量)
列(不同)
column
Point,包括:tag(带索引的,非必须)、field(不带索引)、timestemp(唯一主键)
2.4 Point数据构成
由于database和measurement与传统数据库基本相同,这里不做过多解释,以下针对influxdb中特有的Point进行讲解 。
Point是InfluxDB中独有的概念,由时间(time)、数据(field)、标签(tags)三类字段组成 。
(1)time:代表每条数据的时间字段,是measurement中的数据主键,因此time字段具有索引属性 。一条point只能有一个time 。
(2)field:代表各种数据的字段,例如气温、压力、股价等,field字段没有索引属性 。一条point可以包括多个field 。
(3)tag:代表各类非数据字段,例如设备编码、地区、姓名等,tag字段有索引属性 。一条point可以包括多个tag 。
例如:监控系统系统中,保存某个服务器的cpu和内存等资源使用情况,使用cpu_usage_total 的表名(measurement)保存数据 。以下表示某一个point的样例数据:
彻底搞懂时序数据库InfluxDB,在SpringBoot整合InfluxDB


推荐阅读