快速使用时序数据库InfluxDB

InfluxDB 是一款优秀的时间序列数据库,适合存储设备性能、日志、物联网传感器等带时间戳的数据。

1.  InfluxDB 主要特性

InfluxDB 也就是 TSDB ,是区别于关系数据库的一种数据库,比较适合记录时间为横轴的若干数据点能轻松处理高写入和高查询负载( 数据采集与数据可视化非常常见的场景 ,被广泛应用于存储系统的监控数据,IoT 行业的实时数据等场景) 。 具体介绍请参阅 InfluxDB 官方文档: https://docs.influxdata.com/influxdb/

内置HTTP接口,使用方便

数据可以打标记,查让查询可以很灵活

SQL的查询语句

安装管理很简单,并且读写数据很高效

能够实时查询,数据在写入时被索引后就能够被立即查出


与传统数据库中的名词做比较

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 环境。

 

  图片

 

 

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);

 

        }

        /// 

        ///  InfluxDB中写入数据

        /// 

        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()

                {

                    { "Id", "5810953" },

                    { "name", strName }

                },

                    Fields = new Dictionary()

                {

                    { "Val",strValue }

                },

                    Timestamp = DateTime.UtcNow

                };

 

                var dbName = "test";

 

 

 

                //从指定库中写入数据,支持传入多个对象的集合

 

                var response = await clientDb.Client.WriteAsync(point_model, dbName);

            }

        }

        /// 

        ///  InfluxDB中读取数据

        /// 

 

        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端管理

http://IP:8086/

 

  图片

 

  图片

 

 

yak

yak123456

yakdb

 

  图片

 

  图片

 

  图片

 

 

 

 

 

Linux安装 influxdb


安装详见:https://docs.influxdata.com/influxdb/v2.2/install/?t=Linux

 

鸣谢

https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654092774&idx=8&sn=d57819c810f176f9995c827903a8f09b&chksm=80d819b3b7af90a5ae8bb28d94703f7039ca3328cece309004e8fe8bde7e714b781bce7587ac&scene=27

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 


请使用浏览器的分享功能分享到微信等