快速使用时序数据库InfluxDB
快速使用时序数据库InfluxDB
InfluxDB是一款优秀的时间序列数据库,适合存储设备性能、日志、物联网传感器等带时间戳的数据。
1. InfluxDB主要特性
InfluxDB也就是TSDB,是区别于关系数据库的一种数据库,比较适合记录时间为横轴的若干数据点,能轻松处理高写入和高查询负载(数据采集与数据可视化非常常见的场景,被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景)。 具体介绍请参阅InfluxDB官方文档: https://docs.influxdata.com/influxdb/。
l 内置HTTP接口,使用方便
l 数据可以打标记,查让查询可以很灵活
l 类SQL的查询语句
l 安装管理很简单,并且读写数据很高效
l 能够实时查询,数据在写入时被索引后就能够被立即查出
与传统数据库中的名词做比较
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point相当于传统数据库里的一行数据,如下表所示:
1.1与关系型数据库MySQL对比
在用TSDB之前,存储一些传感器数值用MySQL表如下:
在web应用中,经常有按时间查找和展示历史数据的需求,如下:
以上的情况相比MySQL 就更适合用TSDB
2. Windows中运行influxdb
2.1下载influxdb
官网:https://portal.influxdata.com/downloads/
官网只提供最新版的下载地址,不过没关系,我们只需要把下载地址里的版本号改成需要的也一样可以下载。因为我们需要安装两个版本,所以这里就使用tar包解压的方式来安装。
这里以Windows为例,说明一下环境搭建,使用Docker或者Linux下安装配置都基本一样
选择对应平台的influxdb:
https://dl.influxdata.com/influxdb/releases/influxdb-1.7.1_windows_amd64.zip;
2.2 解压安装
下载后解压,得到 influxd.exe、influx.exe、influxdb.conf 等文件。
influxd 是influx的主程序。influx.exe 表示客户端,influxd.exe 表示服务端,influx_inspect.exe 表示查看工具,influx_stress.exe 表示压力测试工具,influx_tsm 表示数据库转换工具(将数据库从 b1 或 bz1 格式转换为 tsm1 格式)。
2.3 修改配置文件
influxdb.conf 是配置文件,我们需要修改该文件,主要是三个路径修改:
3. 启动
- 启动服务端 influxd.exe;
- 打开客户端 influx.exe,可看到客户端也是 http 连接服务端,其端口在 conf 配置文件中配置。
4. 类SQL操作InfluxDB
可通过SQL-like语言直接操作influxdb。
4.1 InfluxDB数据库操作
• 显示数据库
show databases
• 新建数据库
create database yakdev
• 删除数据库
drop database yakdev
• 使用指定数据库
use yakdev
4.2 InfluxDB数据表操作
在InfluxDB当中,并没有表(table)这个概念,取而代之的是measurements MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表。
• 显示所有表
show measurements
• 新建表
InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。
insert dev_a,hostname=server01 value=4422218342
insert dev_b,host=1 value=41556593150
其中 dev_a,dev_b 就是表名,hostname是索引(tag),value=xx是记录值(field),记录值可以有多个,系统自带追加时间戳
或者添加数据时,自己写入时间戳
insert dev_a,hostname=server01 value=4422218342 1435362189575692182
• 查询数据
SELECT * FROM "dev_a" WHERE time > now() - 5m
• 删除表
drop measurement dev_a
3、数据保存策略(Retention Policies)
influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。
• 查看当前数据库Retention Policies
show retention policies on "db_name"
• 创建新的Retention Policies
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
rp_name:策略名;
db_name:具体的数据库名;
3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期);
replication 1:副本个数,一般为1就可以了;
default:设置为默认策略
• 修改Retention Policies
alter retention policy “rp_name” on “db_name” duration 30d default
• 删除Retention Policies
drop retention policy “rp_name” on “db_name”
运行的SQL:
show retention policies on yakdev
create retention policy "rp_yakdev" on "yakdev" duration 3w replication 1 default
alter retention policy "rp_yakdev" on "yakdev" duration 30d
drop retention policy "rp_yakdev" on "yakdev"
5. 管理工具操作InfluxDB
window系统可以使用 InfluxDB Studio,下载地址是InfluxDB Studio下载地址。
https://github.com/CymaticLabs/InfluxDBStudio
InfluxDB Studio安装
InfluxDB Studio解压即可使用,不用安装:
使用“连接配置”对话框来配置InfluxDB连接的详细信息:
Name:连接的名称。
Adress:InfluxDB服务器的主机URI。端口在右侧填写,默认为8086。
数据库:用于连接的数据库。将其保留为空白以列出所有数据库(需要管理员权限)。
用户名:用于连接的InfluxDB用户名,一般没设置用户名
密码:用于连接的InfluxDB密码,一般没设置密码
使用SSL:连接到InfluxDB时是否使用SSL安全性(HTTPS)。
使用“test”按钮,可以使用提供的连接信息测试与InfluxDB的连接。提示连接成功,说明
使用Ping按钮可以Ping InfluxDB服务器并检查响应时间和服务器版本。
按"保存"按钮创建或更新连接信息。
6. C#操作InfluxDB
在.net core项目中直接引用“InfluxData.Net”,我的.net core 5.0环境。
<PackageReference Include="InfluxData.Net" Version="8.0.1" />
private void IniInflux()
{
//连接InfluxDb的API地址、账号、密码
var infuxUrl = "http://localhost:8086/";
var infuxUser = "admin";
var infuxPwd = "admin";
//创建InfluxDbClient实例
clientDb = new InfluxDbClient(infuxUrl, infuxUser, infuxPwd, InfluxDbVersion.Latest);
}
/// <summary>
/// 往InfluxDB中写入数据
/// </summary>
public async Task AddData(JObject jsonObject)
{
foreach (var dev in jsonObject["device"])
{
string strValue = (string)dev["value"];
string strName = (string)dev["name"];
var point_model = new Point()
{
Name = "fanyidev",//表名
Tags = new Dictionary<string, object>()
{
{ "Id", "5810953" },
{ "name", strName }
},
Fields = new Dictionary<string, object>()
{
{ "Val",strValue }
},
Timestamp = DateTime.UtcNow
};
var dbName = "test";
//从指定库中写入数据,支持传入多个对象的集合
var response = await clientDb.Client.WriteAsync(point_model, dbName);
}
}
/// <summary>
/// 从InfluxDB中读取数据
/// </summary>
public async Task GetData()
{
//传入查询命令,支持多条
var queries = new[]
{
" SELECT * FROM fanyidev WHERE time> now() - 24h "
};
var dbName = "test";
//从指定库中查询数据
var response = await clientDb.Client.QueryAsync(queries, dbName);
//得到Serie集合对象(返回执行多个查询的结果)
var series = response.ToList();
//取出第一条命令的查询结果,是一个集合
var list = series[0].Values;
//从集合中取出第一条数据
var info_model = list.FirstOrDefault();
}
7. Docker安装InfluxDB
按官方提供的docker镜像部署,直接拉取镜像
docker pull influxdb:2.2.0
由于influxDB开发时就设计好了, 官方也给出了环境配置变量,启动时可以通过这些环境变量对influxdb进行配置InfluxDB配置。
7.1 设置config
mkdir /etc/influxdb
# 整个默认配置文件出来
docker run --rm influxdb:2.2.0 influxd print-config > /etc/influxdb/config.yml
7.2 设置volume
# 创建目录
mkdir /data/influxdb
# run
docker run -d --name influxdb -p 8086:8086 -v /etc/influxdb/config.yml:/etc/influxdb2/config.yml --volume /data/influxdb:/var/lib/influxdb2 influxdb:2.2.0
首次运行用docker run ,再次运行:docker restart influxdb
influxdb官网推荐的是2.1.1,这个版本总感觉有内存泄露,越用占内存越多,因此换到最新2.2.0版本。
7.3 web端管理
yak
yak123456
yakdb
8 Linux安装influxdb
安装详见:https://docs.influxdata.com/influxdb/v2.2/install/?t=Linux
9 鸣谢
https://www.cnblogs.com/michellexiaoqi/p/14627956.html
https://blog.csdn.net/weixin_39530149/article/details/111253980
https://blog.csdn.net/weixin_43287508/article/details/89851362
https://www.jianshu.com/p/f0905f36e9c3
https://hub.docker.com/_/chronograf
https://www.hangge.com/blog/cache/detail_3002.html
https://zhuanlan.zhihu.com/p/399407851
https://blog.csdn.net/weixin_46560589/article/details/126002393
https://zhuanlan.zhihu.com/p/559898070
https://blog.csdn.net/wsdc0521/article/details/106064914
https://blog.csdn.net/xuehu96/article/details/123978640
https://dandelioncloud.cn/article/details/1605366992129441794
https://www.oschina.net/p/influxdb?hmsr=aladdin1e1
https://www.cnblogs.com/dehai/p/4887309.html
https://blog.csdn.net/woddle/article/details/98770448
https://blog.csdn.net/weixin_42523985/article/details/119364370
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/17078319.html
欢迎各位大佬们评论指正
QQ讨论群:610129902