目录💻
- 一、介绍
- 1、时序数据库介绍
- 特点:
- 常见的时序数据库
- 时序库受欢迎度排名
- 2、InfluxDB介绍
- **InfluxDB 1.x 和 2.0 的主要区别**
- InfluxDB行协议
- 二、docker安装 InfluxDB v2
- 三. Web UI常用功能介绍以及使用
- 1、页面介绍
- 2、功能使用
- 2.1、创建bucket
- 2.2、添加数据
- 2.3、Data Explorer 查询数据
一、介绍
1、时序数据库介绍
时序数据库全称为时间序列数据库。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。时序数据的兴起还是榜上了物联网的大风。物联网(Internet of Things,简称IOT)是指通过各种信息传感器实时采集任何需要管理设备的信息,并进行管理。物联网的基础数据具有数据量大、结构单一、时间属性强、查询简单等特点,传统的关系型数据库在面对物联网数据时,显得应对发力,基本上属于功能过剩但性能不足。目前火热的新能源汽车的车联网也一样需要使用到时序数据库。
特点:
- 时间戳索引:时序数据库通常对时间戳进行优化索引,以便快速查询。
- 高并发写入:能够处理高并发写入操作,适用于实时数据收集。
- 数据压缩:通常采用高效的数据压缩技术,减少存储空间需求。
- 数据聚合:支持数据聚合操作,如求平均值、最大值、最小值等。
- 保留策略:可以设置数据的保留期限,自动清理旧数据
常见的时序数据库
-
InfluxDB:一个开源的时序数据库,适用于存储和查询大量时间序列数据。流行度很高,支持Go语言,社区活跃度高,也是我们接下来要介绍使用的。是当下使用使用量最多的时序数据库
-
TDengine: 是一款国内涛思数据推出的开源、高性能、分布式、支持 SQL 的时序数据库,其时序数据库核心代码包括集群功能全部开源,同时 TDengine 还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少研发和运维的复杂度。在几年时间就可以使用量进入前十。
-
Prometheus:一个开源监控系统,自带时序数据库功能。
-
TimescaleDB:一个基于PostgreSQL的时序数据库插件,将关系数据库的功能与时间序列数据库的性能相结合。
时序库受欢迎度排名
排名取自于https://db-engines.com
2、InfluxDB介绍
InfluxDB是一种由InfluxData公司开发的开源时序数据库(Time-Series Database,TSDB),专门设计用来处理高并发的时序数据写入和查询。它非常适合用于存储涉及大量时间戳的数据,例如服务器指标、传感器数据、实时分析报告、应用程序性能监控等。
InfluxDB目前市面上使用的有两个主要的版本为1.x和2.x的还有在进行维护,InfluxDB在2.x版本的时候进行了重大的更新。
-
InfluxDB 1.x
InfluxDB 1.x 是 InfluxDB 的第一个主要版本,于 2013 年发布。它使用 Go 语言编写,支持多种数据类型,包括整数、浮点数、字符串和布尔值。InfluxDB 1.x 支持 SQL 查询语言,用户可以使用 SQL 语句查询和分析数据。 -
InfluxDB 2.0
InfluxDB 2.0 是 InfluxDB 的第二个主要版本,于 2019 年发布。具有更好的性能、安全性和可靠性。InfluxDB 2.0 引入了一个新的时序数据模型,支持更灵活的数据结构和更高效的数据存储。InfluxDB 2.0 支持 Flux 查询语言,Flux 是一种专门为时序数据设计的查询语言,提供了更强大的数据分析能力。
InfluxDB 1.x 和 2.0 的主要区别
以下是 InfluxDB 1.x 和 2.0 的主要区别:
- 编程语言:InfluxDB 1.x 使用 Go 语言编写,而 InfluxDB 2.0 使用 Rust 语言编写。
- 数据模型:InfluxDB 1.x 使用一个基于列的数据模型,而 InfluxDB 2.0 引入了一个新的时序数据模型,支持更灵活的数据结构和更高效的数据存储。
- 查询语言:InfluxDB 1.x 支持 SQL 查询语言,而 InfluxDB 2.0 支持 Flux 查询语言。
- 性能:InfluxDB 2.0 具有更好的性能、安全性和可靠性。
- 存储:InfluxDB 2.0 支持更高效的数据存储和压缩。
- 集成:InfluxDB 2.0 支持更多的集成,包括 Grafana、Telegraf、Kapacitor 等。
- 监控和告警:InfluxDB 2.0 提供了监控和告警功能,能够实时监控数据并发送告警通知。
总的来说,InfluxDB 2.0 是一个更强大的、更灵活的、更高效的时间序列数据库,与 InfluxDB 1.x 相比具有许多新的特性和改进。
InfluxDB行协议
要想了解一个数据库,我们首先得先了解该数据库的数据是如何进行存储的。和一些关键概念指标。
与csv相似,在lnfluxDB 行协议中,一条数据和另外一条数据之间使用换行符分隔,所以一行就是一条数据。另外,在时序库领域,一行数据由下面的4种元素构成。
measurement、tags、field、time。前面三个字段就可以定义一个序列
除了上面四种在lnfluxDB中还有其他的一些含义。
- database 代表含义:数据库
bucket
代表含义:存储桶- measurement 代表含义:数据库中的表
- point 代表含义:表里面的一行数据,由下面的类型组成
- 时间戳(time):每个数据记录时间,是数据库中的主索引(会自动生成)
- 数据(field):各种记录值(没有索引的属性)
- 标签(tags):各种有索引的属性
- series 代表含义:所有在数据库中的数据,
二、docker安装 InfluxDB v2
- 下拉镜像
# 从官方镜像仓库拉取
docker pull influxdb:2.7.6
# 由于docker的官方仓库被禁了,上面的可能拉取不下来,可以到我的阿里镜像仓库拉取
docker pull registry.cn-hangzhou.aliyuncs.com/zhengfp_images/influxdb:2.7.6
-
创建容器
docker run -d -p 8083:8083 -p 8086:8086 -v /home/influxdb/data:/var/lib/influxdb2 --name influxdb2.7.6 influxdb:2.7.6
- 把镜像换为你下拉下来的镜像名
- 把-v 映射的地址也换为自己的本地存储的目录实际地址,避免容器销毁后数据就没了
-
创建成功后访问web端UI地址
http://localhost:8086/signin
- 点击中间的按钮
- 设置个人的基础登陆信息和Bucket
- 进入该页面代表执行成功,创建好了自己的web UI的登陆账号和第一个bucket存储桶,会给你一串连接凭证,需要自己保存起来,用于后续连接访问使用。
- 点击ADVANCED就进入主页面了。后面在介绍Web UI中常用到的地方
三. Web UI常用功能介绍以及使用
1、页面介绍
- Load Data功能页
- 查询页
- flux语言写法
2、功能使用
2.1、创建bucket
- 点击load data页面的buckets
- 创建
2.2、添加数据
- 选择sources,因为是测试,直接通过line写测试数据,实际开发中,肯定是不会去手动写入的。
- 编写对应行协议数据,格式不能错,遵照👆写的格式
people,name=tony age=12
people,name=xiaohong age=13
people,name=xiaobai age=14
people,name=xiaohei age=15
people,name=xiaohua age=12
点击wrlte data则会提示保存成功
2.3、Data Explorer 查询数据
- 使用puery实现查询
- 下面的query部分是查询条件
- from:是选择要查询的bucket存储桶
- filter:是过滤筛选的条件
- _field:是通过什么字段进行筛选,筛选_field为age的数据
- view Raw Data:开启表示数据的方式展现,不开启,表示图表的方式展现
- Past:表示查询什么时间段段数据,如同,是
Past 6h
则表示查询最近6小时的数据- SCRIPT EDITO:表示切换为flux语言编写的方式执行查询。
- SUBMIT:开始查询
- 筛选`name`字段包括 **tony1**和**xiaobai1**的数据
- 使用FLUX实现查询
下面是使用flux实现的简单查询,flux语言使用起来也非常简单易懂,基本上会sql的人上手速度都会比较快,下面简单解释一下
FLUX在InfluxDB使用
from(bucket: "test01")
:表示查询test01存储桶中的数据|> range(start: -6h)
:表示查询的时间范围,为最近六小时的数据|> filter(fn: (r) => r["name"] == "tony1" or r["name"] == "xiaohong1" or r["name"] == "xiaohei")
:表示查询name字段等tony1、xiaohong1、xiaohei三个值的数据,在使用上也是使用的和sql一样,使用or表示或者。
FLUX在InfluxDB中使用查询,基本上是由三部分组成指定存储桶,指定查询时间,然后就是使用filter进行过滤了(包括使用一些函数),后续会详细介绍FLUX的使用,这就不过多介绍了