快速使用时序数据库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端管理

http://IP:8086/

yak

yak123456

yakdb

8 Linux安装influxdb

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

9 鸣谢

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

快速使用时序数据库InfluxDB的更多相关文章

  1. Spring Boot中使用时序数据库InfluxDB

    除了最常用的关系数据库和缓存之外,之前我们已经介绍了在Spring Boot中如何配置和使用MongoDB.LDAP这些存储的案例.接下来,我们继续介绍另一种特殊的数据库:时序数据库InfluxDB在 ...

  2. 简析时序数据库 InfluxDB

    时序数据基础 时序数据特点 时序数据TimeSeries是一连串随时间推移而发生变化的相关事件. 以下图的 CPU 监控数据为例,同个 IP 的相关监控数据组成了一条时序数据,不相关数据则分布在不同的 ...

  3. 时序数据库InfluxDB安装及使用

    时序数据库InfluxDB安装及使用 1 安装配置 安装 wget https://dl.influxdata.com/influxdb/releases/influxdb-1.3.1.x86_64. ...

  4. 分布式时序数据库InfluxDB

    我们内部的监控系统用到分布式时序数据库InfluxDB http://www.ttlsa.com/monitor-safe/monitor/distributed-time-series-databa ...

  5. 时序数据库InfluxDB

    在系统服务部署过后,线上运行服务的稳定性是系统好坏的重要体现,监控系统状态至关重要,经过调研了解,时序数据库influxDB在此方面表现优异. influxDB介绍 时间序列数据是以时间字段为每行数据 ...

  6. 时序数据库InfluxDB(I)- 搭建与采集信息demo操作

    搭建环境:vmware workstation pro15.5.0, ubuntu18.04.3 实践时间:2019.10.12-10.27 (一)时序数据库InfluxDB准备 (1)安装 曾出现问 ...

  7. [Go] 时序数据库influxdb的安装

    日志类的数据时候存储在时序数据库中,下面就是时序数据库influxdb的安装 curl -sL https://repos.influxdata.com/influxdb.key | apt-key ...

  8. 深入浅出:了解时序数据库 InfluxDB

    数据模型 1.时序数据的特征 时序数据应用场景就是在时间线上每个时间点都会从多个数据源涌入数据,按照连续时间的多种纬度产生大量数据,并按秒甚至毫秒计算的实时性写入存储. 传统的RDBMS数据库对写入的 ...

  9. 【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例

    前言:如题.直接上手撸,附带各种截图,就不做介绍了. 1.influxDB的官网下载地址  https://portal.influxdata.com/downloads/ 打开以后,如下图所示,可以 ...

  10. 时序数据库InfluxDB的基本语法

    一 了解InfluxDB的必要性 时序数据库主要存放的数据 Time series data is a series of data points each associated with a spe ...

随机推荐

  1. 接水问题(NOIP 2010 PJT2)

    这个的思路就是让各个水龙头所用的时间尽可能地接近,可以先向优先队列中推入前m个数,由于开的是小根堆最小的数在前面我们把它拿出来,加上下一个人所需的时间.如此反复,直到都接完水,最大值就是答案. #in ...

  2. SpringBoot项目启动后再请求远程接口的实现方式

    场景 有一个SpringBoot项目需要在启动后请求另一个远程服务拿取配置,而不是加载过程中去请求,可能会出现类没有实例化的场景,因此需要实现项目完全启动后再进行请求的场景. 解决 一般会有两种实现方 ...

  3. 单例 Bean 的线程安全问题

    最近面试遇到一个问题:单例 Bean 的线程安全问题怎么解决的. 之前了解但是没有深究它的解决方法.大部分时候我们并没有在项目中使用多线程,所以很少有人会关注这个问题. 大部分 Bean 实际都是无状 ...

  4. python 合并目标文件夹中多个txt文件到指定文件中

    # coding = 'utf-8' # description: 合并目标文件夹中多个txt文件,到指定文件中. import os def file_merge_to_one(dirpath): ...

  5. 代码随想录算法训练营day12 | leetcode 239. 滑动窗口最大值 347.前 K 个高频元素

    基础知识 ArrayDeque deque = new ArrayDeque(); /* offerFirst(E e) 在数组前面添加元素,并返回是否添加成功 offerLast(E e) 在数组后 ...

  6. 数据转换工具DBT介绍及实操

    一.什么是DBT dbt (data build tool)是一款流行的开源数据转换工具,能够通过 SQL 实现数据转化,将命令转化为表或者视图,提升数据分析师的工作效率.dbt 主要功能在于转换数据 ...

  7. 从NLP视角看电视剧《狂飙》,会有什么发现?

    目录 1.背景 2.数据获取 3.文本分析与可视化 3.1 短评数据预处理 3.2 词云图可视化 3.3 top关键词共现矩阵网络 3.4 <狂飙>演职员图谱构建 4.短评相关数据分析与可 ...

  8. svn拉取出现目标机器积极拒绝,无法连接

    问题如图: 前言 这边服务器环境上的SVN仓库地址不能连接,不能提交代码和下载代码了,错误内容就是"由于目标计算机积极拒绝,无法连接.." 出错的原因 询问了相关的事项,知道了这次 ...

  9. js获取input处理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. mysql8.0.30主从配置

    安装包下载地址: https://downloads.mysql.com/archives/community/ 1. 解压介质包: # tar xf mysql-8.0.30-linux-glibc ...