快速使用時(shí)序數(shù)據(jù)庫(kù)InfluxDB
快速使用時(shí)序數(shù)據(jù)庫(kù)InfluxDB
InfluxDB是一款優(yōu)秀的時(shí)間序列數(shù)據(jù)庫(kù),適合存儲(chǔ)設(shè)備性能、日志、物聯(lián)網(wǎng)傳感器等帶時(shí)間戳的數(shù)據(jù)。
1. InfluxDB主要特性
InfluxDB也就是TSDB,是區(qū)別于關(guān)系數(shù)據(jù)庫(kù)的一種數(shù)據(jù)庫(kù),比較適合記錄時(shí)間為橫軸的若干數(shù)據(jù)點(diǎn),能輕松處理高寫入和高查詢負(fù)載(數(shù)據(jù)采集與數(shù)據(jù)可視化非常常見(jiàn)的場(chǎng)景,被廣泛應(yīng)用于存儲(chǔ)系統(tǒng)的監(jiān)控?cái)?shù)據(jù),IoT行業(yè)的實(shí)時(shí)數(shù)據(jù)等場(chǎng)景)。 具體介紹請(qǐng)參閱InfluxDB官方文檔: https://docs.influxdata.com/influxdb/。
l 內(nèi)置HTTP接口,使用方便
l 數(shù)據(jù)可以打標(biāo)記,查讓查詢可以很靈活
l 類SQL的查詢語(yǔ)句
l 安裝管理很簡(jiǎn)單,并且讀寫數(shù)據(jù)很高效
l 能夠?qū)崟r(shí)查詢,數(shù)據(jù)在寫入時(shí)被索引后就能夠被立即查出
與傳統(tǒng)數(shù)據(jù)庫(kù)中的名詞做比較
Point由時(shí)間戳(time)、數(shù)據(jù)(field)、標(biāo)簽(tags)組成。
Point相當(dāng)于傳統(tǒng)數(shù)據(jù)庫(kù)里的一行數(shù)據(jù),如下表所示:

1.1與關(guān)系型數(shù)據(jù)庫(kù)MySQL對(duì)比
在用TSDB之前,存儲(chǔ)一些傳感器數(shù)值用MySQL表如下:

在web應(yīng)用中,經(jīng)常有按時(shí)間查找和展示歷史數(shù)據(jù)的需求,如下:

以上的情況相比MySQL 就更適合用TSDB

2. Windows中運(yùn)行influxdb
2.1下載influxdb
官網(wǎng):https://portal.influxdata.com/downloads/
官網(wǎng)只提供最新版的下載地址,不過(guò)沒(méi)關(guān)系,我們只需要把下載地址里的版本號(hào)改成需要的也一樣可以下載。因?yàn)槲覀冃枰惭b兩個(gè)版本,所以這里就使用tar包解壓的方式來(lái)安裝。
這里以Windows為例,說(shuō)明一下環(huán)境搭建,使用Docker或者Linux下安裝配置都基本一樣
選擇對(duì)應(yīng)平臺(tái)的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 表示服務(wù)端,influx_inspect.exe 表示查看工具,influx_stress.exe 表示壓力測(cè)試工具,influx_tsm 表示數(shù)據(jù)庫(kù)轉(zhuǎn)換工具(將數(shù)據(jù)庫(kù)從 b1 或 bz1 格式轉(zhuǎn)換為 tsm1 格式)。
2.3 修改配置文件
influxdb.conf 是配置文件,我們需要修改該文件,主要是三個(gè)路徑修改:

3. 啟動(dòng)
- 啟動(dòng)服務(wù)端 influxd.exe;
- 打開(kāi)客戶端 influx.exe,可看到客戶端也是 http 連接服務(wù)端,其端口在 conf 配置文件中配置。


4. 類SQL操作InfluxDB
可通過(guò)SQL-like語(yǔ)言直接操作influxdb。
4.1 InfluxDB數(shù)據(jù)庫(kù)操作
? 顯示數(shù)據(jù)庫(kù)
show databases
? 新建數(shù)據(jù)庫(kù)
create database yakdev
? 刪除數(shù)據(jù)庫(kù)
drop database yakdev
? 使用指定數(shù)據(jù)庫(kù)
use yakdev

4.2 InfluxDB數(shù)據(jù)表操作
在InfluxDB當(dāng)中,并沒(méi)有表(table)這個(gè)概念,取而代之的是measurements MEASUREMENTS,MEASUREMENTS的功能與傳統(tǒng)數(shù)據(jù)庫(kù)中的表一致,因此我們也可以將MEASUREMENTS稱為InfluxDB中的表。
? 顯示所有表
show measurements
? 新建表
InfluxDB中沒(méi)有顯式的新建表的語(yǔ)句,只能通過(guò)insert數(shù)據(jù)的方式來(lái)建立新表。
insert dev_a,hostname=server01 value=4422218342
insert dev_b,host=1 value=41556593150
其中 dev_a,dev_b 就是表名,hostname是索引(tag),value=xx是記錄值(field),記錄值可以有多個(gè),系統(tǒng)自帶追加時(shí)間戳
或者添加數(shù)據(jù)時(shí),自己寫入時(shí)間戳
insert dev_a,hostname=server01 value=4422218342 1435362189575692182
? 查詢數(shù)據(jù)
SELECT * FROM "dev_a" WHERE time > now() - 5m
? 刪除表
drop measurement dev_a

3、數(shù)據(jù)保存策略(Retention Policies)
influxDB是沒(méi)有提供直接刪除數(shù)據(jù)記錄的方法,但是提供數(shù)據(jù)保存策略,主要用于指定數(shù)據(jù)保留時(shí)間,超過(guò)指定時(shí)間,就刪除這部分?jǐn)?shù)據(jù)。
? 查看當(dāng)前數(shù)據(jù)庫(kù)Retention Policies
show retention policies on "db_name"
? 創(chuàng)建新的Retention Policies
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
rp_name:策略名;
db_name:具體的數(shù)據(jù)庫(kù)名;
3w:保存3周,3周之前的數(shù)據(jù)將被刪除,influxdb具有各種事件參數(shù),比如:h(小時(shí)),d(天),w(星期);
replication 1:副本個(gè)數(shù),一般為1就可以了;
default:設(shè)置為默認(rèn)策略
? 修改Retention Policies
alter retention policy “rp_name” on “db_name” duration 30d default
? 刪除Retention Policies
drop retention policy “rp_name” on “db_name”

運(yùn)行的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系統(tǒng)可以使用 InfluxDB Studio,下載地址是InfluxDB Studio下載地址。
https://github.com/CymaticLabs/InfluxDBStudio
InfluxDB Studio安裝
InfluxDB Studio解壓即可使用,不用安裝:

使用“連接配置”對(duì)話框來(lái)配置InfluxDB連接的詳細(xì)信息:
Name:連接的名稱。
Adress:InfluxDB服務(wù)器的主機(jī)URI。端口在右側(cè)填寫,默認(rèn)為8086。
數(shù)據(jù)庫(kù):用于連接的數(shù)據(jù)庫(kù)。將其保留為空白以列出所有數(shù)據(jù)庫(kù)(需要管理員權(quán)限)。
用戶名:用于連接的InfluxDB用戶名,一般沒(méi)設(shè)置用戶名
密碼:用于連接的InfluxDB密碼,一般沒(méi)設(shè)置密碼
使用SSL:連接到InfluxDB時(shí)是否使用SSL安全性(HTTPS)。
使用“test”按鈕,可以使用提供的連接信息測(cè)試與InfluxDB的連接。提示連接成功,說(shuō)明
使用Ping按鈕可以Ping InfluxDB服務(wù)器并檢查響應(yīng)時(shí)間和服務(wù)器版本。
按"保存"按鈕創(chuàng)建或更新連接信息。

6. C#操作InfluxDB
在.net core項(xiàng)目中直接引用“InfluxData.Net”,我的.net core 5.0環(huán)境。
<PackageReference Include="InfluxData.Net" Version="8.0.1" />

private void IniInflux()
{
//連接InfluxDb的API地址、賬號(hào)、密碼
var infuxUrl = "http://localhost:8086/";
var infuxUser = "admin";
var infuxPwd = "admin";
//創(chuàng)建InfluxDbClient實(shí)例
clientDb = new InfluxDbClient(infuxUrl, infuxUser, infuxPwd, InfluxDbVersion.Latest);
}
/// <summary>
/// 往InfluxDB中寫入數(shù)據(jù)
/// </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";
//從指定庫(kù)中寫入數(shù)據(jù),支持傳入多個(gè)對(duì)象的集合
var response = await clientDb.Client.WriteAsync(point_model, dbName);
}
}
/// <summary>
/// 從InfluxDB中讀取數(shù)據(jù)
/// </summary>
public async Task GetData()
{
//傳入查詢命令,支持多條
var queries = new[]
{
" SELECT * FROM fanyidev WHERE time> now() - 24h "
};
var dbName = "test";
//從指定庫(kù)中查詢數(shù)據(jù)
var response = await clientDb.Client.QueryAsync(queries, dbName);
//得到Serie集合對(duì)象(返回執(zhí)行多個(gè)查詢的結(jié)果)
var series = response.ToList();
//取出第一條命令的查詢結(jié)果,是一個(gè)集合
var list = series[0].Values;
//從集合中取出第一條數(shù)據(jù)
var info_model = list.FirstOrDefault();
}
7. Docker安裝InfluxDB
按官方提供的docker鏡像部署,直接拉取鏡像
docker pull influxdb:2.2.0
由于influxDB開(kāi)發(fā)時(shí)就設(shè)計(jì)好了, 官方也給出了環(huán)境配置變量,啟動(dòng)時(shí)可以通過(guò)這些環(huán)境變量對(duì)influxdb進(jìn)行配置InfluxDB配置。
7.1 設(shè)置config
mkdir /etc/influxdb
# 整個(gè)默認(rèn)配置文件出來(lái)
docker run --rm influxdb:2.2.0 influxd print-config > /etc/influxdb/config.yml
7.2 設(shè)置volume
# 創(chuàng)建目錄
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
首次運(yùn)行用docker run ,再次運(yùn)行:docker restart influxdb
influxdb官網(wǎng)推薦的是2.1.1,這個(gè)版本總感覺(jué)有內(nèi)存泄露,越用占內(nèi)存越多,因此換到最新2.2.0版本。
7.3 web端管理


yak
yak123456
yakdb



8 Linux安裝influxdb
安裝詳見(jiàn):https://docs.influxdata.com/influxdb/v2.2/install/?t=Linux
9 鳴謝
http://www.rzrgm.cn/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
http://www.rzrgm.cn/dehai/p/4887309.html
https://blog.csdn.net/woddle/article/details/98770448
https://blog.csdn.net/weixin_42523985/article/details/119364370
本文來(lái)自博客園,作者:{春光牛牛,yak},轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.rzrgm.cn/yakniu/p/17078319.html
歡迎各位大佬們?cè)u(píng)論指正
QQ討論群:610129902


浙公網(wǎng)安備 33010602011771號(hào)