最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

influxdb數(shù)據(jù)庫(kù)常用命令及SpringBoot整合

 更新時(shí)間:2023年07月10日 09:28:27   作者:北漂IT民工_程序員_ZG  
這篇文章主要介紹了influxdb數(shù)據(jù)庫(kù)常用命令及SpringBoot整合,Influxdb是一個(gè)開(kāi)源的分布式時(shí)序、時(shí)間和指標(biāo)數(shù)據(jù)庫(kù),使用go語(yǔ)言編寫(xiě),無(wú)需外部依賴(lài),需要的朋友可以參考下

一、influxdb一些概念

Influxdb是一個(gè)開(kāi)源的分布式時(shí)序、時(shí)間和指標(biāo)數(shù)據(jù)庫(kù),使用go語(yǔ)言編寫(xiě),無(wú)需外部依賴(lài)。

注意: influxdb只針對(duì)單機(jī)版開(kāi)源,集群版還是要收費(fèi)的。

1、時(shí)序數(shù)據(jù)庫(kù)

時(shí)間序列數(shù)據(jù)庫(kù)是按照時(shí)間順序來(lái)記錄數(shù)據(jù),比如我們想存儲(chǔ)服務(wù)器CPU和內(nèi)存分鐘級(jí)的使用率,即一分鐘產(chǎn)生一條數(shù)據(jù),時(shí)序數(shù)據(jù)庫(kù)就是最佳選擇。

注意:時(shí)序數(shù)據(jù)庫(kù)是不支持刪除和更新的

2、influxdb和mysql類(lèi)比

在這里插入圖片描述

3、points(類(lèi)似表的一行數(shù)據(jù))數(shù)據(jù)結(jié)構(gòu)

在這里插入圖片描述

4、measurement特性

  • measurement類(lèi)似mysql中的表,無(wú)需單獨(dú)創(chuàng)建,在第一次插入數(shù)據(jù)時(shí)自動(dòng)創(chuàng)建,measurement中無(wú)數(shù)據(jù),表也就不存在了。
  • measurement沒(méi)有update語(yǔ)句,無(wú)法修改measurement以及tags-key和fields-key名稱(chēng),實(shí)際中如有需要只能刪除整個(gè)measurement重新插入數(shù)據(jù)

5、Tag和Field

Tag: 相當(dāng)于mysql的索引,Group By查詢(xún)時(shí)只能用tag和time字段,數(shù)據(jù)類(lèi)型只能是String

Field: 在Group By查詢(xún)中,函數(shù)操作只能用Field字段,例如sum();

Field支持?jǐn)?shù)據(jù)類(lèi)型有int,float,boolean類(lèi)型

講白了,當(dāng)我們插入機(jī)器的cpu使用率時(shí):主機(jī)的IP,Name等信息用Tag存,而使用率大小則用Field存。

6、Series

InfluxDB中的series是一種集合的概念,在同一個(gè)database中,相同retention policy、相同measurement、相同tag的數(shù)據(jù)屬于一個(gè)series集合,同一個(gè)series的數(shù)據(jù)在物理上按照時(shí)間順序排列在一起。

series就是不同tag列,進(jìn)行排列組合。比如一個(gè)表中有兩個(gè)tag字段A和B。 A字段有有3種值,B字段有4種值,則series個(gè)數(shù) = 3*4=12個(gè)。

二、數(shù)據(jù)庫(kù)、表操作命令

1、數(shù)據(jù)庫(kù)操作

//通過(guò)cli操作influxdb,(登錄influxdb)
influx -username root -password root
//查看所有數(shù)據(jù)庫(kù)
show databases
//進(jìn)入到某個(gè)數(shù)據(jù)庫(kù)
use influxdb
//查看用戶(hù),兩列數(shù)據(jù),一列是用戶(hù)名稱(chēng),一列是是否為管理員用戶(hù)
show users
//創(chuàng)建普通戶(hù)
create user "influx" with password '123456'
//創(chuàng)建管理員用戶(hù)
create user "root" with password '123456' with all privileges
//修改用戶(hù)密碼
set password for root= 'root'
/**
* 數(shù)據(jù)庫(kù)設(shè)置admin權(quán)限的兩種方式(建議使用第二種)
*/
GRANT ALL PRIVILEGES ON 數(shù)據(jù)庫(kù)名稱(chēng)  TO 用戶(hù)名稱(chēng)
GRANT ALL PRIVILEGES TO 用戶(hù)名稱(chēng)
/**
* 數(shù)據(jù)庫(kù)撤銷(xiāo)admin權(quán)限的兩種方式(建議使用第二種)
*/
Revoke ALL PRIVILEGES ON 數(shù)據(jù)庫(kù)名稱(chēng) FROM 用戶(hù)名稱(chēng)
Revoke ALL PRIVILEGES FROM 用戶(hù)名稱(chēng)
//查看所有表
show measurements
//查看表的tag
show tag keys from 表名稱(chēng)
//查看表的field
show field keys from 表名稱(chēng)
//查看表的series
show series from "表名稱(chēng)"
//查看當(dāng)前庫(kù)的series
show series

2、表(插入)操作

一般情況下,經(jīng)常作為查詢(xún)條件的列,在初始時(shí)設(shè)置為tag,即索引,fields不常作為查詢(xún)條件,更甚者,在復(fù)雜查詢(xún)語(yǔ)法中,聚合語(yǔ)句group by 后面只能是time和tags。 一個(gè)measurement 是有多個(gè)tag和field的。

/**
* InfluxDB中沒(méi)有顯式的新建表的語(yǔ)句,只能通過(guò)insert數(shù)據(jù)的方式來(lái)建立新表。
* 其中 cpu_usage 就是表名,resKey索引(tag),value=xx是記錄值(field),索引和記錄值可以有多個(gè),后面的時(shí)間戳是我們指定的,如果不指定系統(tǒng)自動(dòng)加當(dāng)前時(shí)間時(shí)間戳。
*/
insert cpu_usage resKey=470b14f0-e869-43ed-a8e6-fd634258271f value=0.96516
#指定時(shí)間戳插入
insert cpu_usage resKey=470b14f0-e869-43ed-a8e6-fd634258271f value=0.96516 1688794582731
//刪除表
drop measurement cpu_usage
//刪除數(shù)據(jù)
//influxDB是沒(méi)有提供直接刪除數(shù)據(jù)記錄的方法,但是提供數(shù)據(jù)保存策略,主要用于指定數(shù)據(jù)保留時(shí)間,超過(guò)指定時(shí)間,就刪除這部分?jǐn)?shù)據(jù)。(數(shù)據(jù)庫(kù)過(guò)期策略至少一個(gè)小時(shí))

三、influxdb的sql操作(查詢(xún))

//查詢(xún)基本構(gòu)成,中括號(hào)[]中間的,都是可選的部分
SELECT * [INTO_clause] FROM "表名" [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT N]

1、select

查詢(xún)注意:

  • 在SELECT 子句中,必須要有至少一個(gè)field key!如果在SELECT子句中只有一個(gè)或多個(gè)tag key,那么該查詢(xún)會(huì)返回空。這是由InfluxDB底層存儲(chǔ)數(shù)據(jù)的方式所導(dǎo)致的結(jié)果。
  • 在查詢(xún)中,發(fā)現(xiàn)插入的時(shí)間會(huì)比實(shí)際時(shí)間少8小時(shí)。那是因?yàn)镮nfluxDB默認(rèn)以UTC時(shí)間存儲(chǔ)并返回時(shí)間戳,當(dāng)接收到一個(gè)時(shí)序數(shù)據(jù)記錄時(shí),InfluxDB將時(shí)間戳從本地時(shí)區(qū)時(shí)間轉(zhuǎn)換為UTC時(shí)間并存儲(chǔ),查詢(xún)時(shí),InfluxDB返回的時(shí)間戳對(duì)應(yīng)的是UTC時(shí)間 。 在sql后面加上tz(‘Asia/Shanghai’),可以將UTC時(shí)間轉(zhuǎn)換為中國(guó)本地時(shí)間, 如果加上tz(‘Asia/Shanghai’)后報(bào)錯(cuò),安裝下go語(yǔ)言的安裝包即可解決。
  • 如果查詢(xún)時(shí),發(fā)現(xiàn)表里一查不出來(lái)數(shù)據(jù),可能是表數(shù)據(jù)太大導(dǎo)致,在后面加個(gè)limit 10,也可能是表明沒(méi)加上保存策略導(dǎo)致的,保存策略下面有講。
SELECT * FROM "cpu_usage" limit 10 tz('Asia/Shanghai')

4、在field上做一些基本計(jì)算

SELECT (value+400)*10 FROM "cpu_usage" limit 10 tz('Asia/Shanghai')

2、where語(yǔ)句

注意事項(xiàng):

  • 在InfluxDB的WHERE子句中,不支持使用 OR 來(lái)指定不同的time區(qū)間,否則將為空。比如:time=1688552647654 or time=1688552647666
  • 支持對(duì)string, boolean, float 和 integer類(lèi)型的field values進(jìn)行比較,如果是string類(lèi)型的field value,一定要用單引號(hào)括起來(lái)。如果不適用引號(hào)括起來(lái),或者使用的是雙引號(hào),將不會(huì)返回任何數(shù)據(jù),有時(shí)甚至都不報(bào)錯(cuò)。
支持的操作符:
= 等于
<> 不等于
!= 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于
// 查詢(xún)有特定field的key value為字符串的數(shù)據(jù)
SELECT * FROM "cpu_usage" WHERE "resKey" = 'qqqqqq'  tz('Asia/Shanghai')
// 查詢(xún)有特定field的key value并且?guī)в?jì)算的數(shù)據(jù)
SELECT (value+400)*10 FROM "cpu_usage" limit 10 tz('Asia/Shanghai')
  • 在WHERE子句中的tag values,也要用單引號(hào)括起來(lái)。如果不用引號(hào)括起來(lái),或者使用雙引號(hào),則查詢(xún)不會(huì)返回任務(wù)數(shù)據(jù)。甚至不會(huì)報(bào)錯(cuò)。
  • 根據(jù)時(shí)間戳來(lái)過(guò)濾數(shù)據(jù)。
//查詢(xún)10天前的數(shù)據(jù)
SELECT * FROM "cpu_usage" WHERE time > now() - 10d
//根據(jù)指定時(shí)間過(guò)濾
SELECT * FROM "cpu_usage" WHERE time >= '2023-06-18T00:00:00Z' AND time <= '2024-08-18T12:30:00Z'

3、group by語(yǔ)句

注意事項(xiàng):

  • 有 GROUP BY的查詢(xún),需要查詢(xún)的字段一定要經(jīng)過(guò)函數(shù)。
  • 對(duì)多個(gè) tag 和單個(gè)tag做 GROUP BY, 求字段value的平均值
SELECT MEAN("value") FROM "temperature" GROUP BY "field1", "field2"
  • 根據(jù)時(shí)間戳進(jìn)行 GROUP BY time(time_interval) ,查詢(xún)指定時(shí)間區(qū)間,以30分鐘間隔分組
SELECT MEAN(value) FROM "cpu_usage" WHERE time >= '2023-07-01T10:00:00Z' AND time < '2024-08-02T00:00:00Z' GROUP BY time(30m) tz('Asia/Shanghai')
  • 根據(jù)時(shí)間戳進(jìn)行GROUP BY time(time_interval, offset_interval),查詢(xún)指定時(shí)間區(qū)間,以30分鐘間隔分組,offset_interval 是一個(gè)持續(xù)時(shí)間。它向前或向后移動(dòng) InfluxDB 的預(yù)設(shè)時(shí)間界限,可以為正或負(fù)數(shù)。
//上面sql第一條數(shù)據(jù)是從2023-07-01 18:00:00開(kāi)始的,如果加上offset_interval值為15m, 則查詢(xún)第一條數(shù)據(jù)變成了2023-07-01 17:45:00   
SELECT MEAN(value) FROM "cpu_usage" WHERE time >= '2023-07-01T10:00:00Z' AND time < '2024-08-02T00:00:00Z' GROUP BY time(30m,15m) tz('Asia/Shanghai')
  • fill()函數(shù)用法,它會(huì)更改不含數(shù)據(jù)的時(shí)間間隔的返回值。
//上面sql中,如果需要聚合的時(shí)間段每數(shù)據(jù),則用fill()中指定的值填充
SELECT MEAN(value) FROM "cpu_usage" WHERE time >= '2023-07-01T10:00:00Z' AND time < '2023-08-02T00:00:00Z' GROUP BY time(30m) fill(10) tz('Asia/Shanghai')
  • Influxdb中Group By查詢(xún)中如果沒(méi)聚合函數(shù),查詢(xún)會(huì)返回該分組內(nèi)的所有數(shù)據(jù)。而Mysql中Group By查詢(xún)中如果沒(méi)聚合函數(shù),查詢(xún)只會(huì)返回一條數(shù)據(jù)。 如果查詢(xún)中有聚合函數(shù),Mysql和Influxdb一樣,返回該組內(nèi)的聚合數(shù),也就只有一條。

4、into語(yǔ)句

INTO主要作用是把一個(gè)表的數(shù)據(jù)導(dǎo)入到另外一個(gè)表中。插入到新表的字段是group by后的字段和查詢(xún)的字段取并集,如果沒(méi)Group By,就只看查詢(xún)出來(lái)的字段。

#把表cpu_usage的數(shù)據(jù)導(dǎo)入到備份表cpu_usage_bak中,新表和舊表的tag和Field不變
SELECT * into "cpu_usage_bak" FROM "cpu_usage" 
#該sql只會(huì)把value字段中插入到備份表cpu_usage_bak中,需要插入的字段在原變和舊表中tag和Field不變
SELECT value into "cpu_usage_bak" FROM "cpu_usage" 
#該sql只會(huì)把value和resKey字段中插入到備份表cpu_usage_bak中,需要插入的字段在原變和舊表中tag和Field不變
SELECT value into "cpu_usage_bak" FROM "cpu_usage"  group by resKey
#和上面sql一樣,只不過(guò)多個(gè)聚合函數(shù)
SELECT max(value) into "cpu_usage_bak" FROM "cpu_usage"  group by resKey
#該sql插入新表后,字段都會(huì)變成field,如果不想變成Filed,查詢(xún)時(shí)加Group By即可
SELECT value,resKey into "cpu_usage_bak" FROM "cpu_usage" 
#該sql中存在子查詢(xún),從子查詢(xún)查數(shù)來(lái)的數(shù)據(jù)插入到新表,字段都變成了Field
SELECT value,resKey into  "default"."cpu_usage_bak"   FROM  (select * from "default"."cpu_usage" group by resKey)

5、子查詢(xún)

子查詢(xún)是嵌套在另一個(gè)查詢(xún)的 FROM 子句中的查詢(xún)。使用子查詢(xún)將查詢(xún)作為條件應(yīng)用于其他查詢(xún)。子查詢(xún)提供與嵌套函數(shù)和 SQLHAVING 子句類(lèi)似的功能。

#求組內(nèi)最大值的平均值
SELECT MEAN("value") FROM (SELECT MAX("value") AS value FROM "cpu_usage" GROUP BY "resKey")
#求兩個(gè)字段差的平均值
SELECT MEAN("difference") FROM (SELECT "字段1" - "字段2" AS "difference" FROM "cpu_usage")

6、INTO導(dǎo)入到新表,導(dǎo)致數(shù)據(jù)丟失問(wèn)題

Influxdb的內(nèi)部機(jī)制是基于時(shí)間的時(shí)序性數(shù)據(jù)庫(kù),每一條記錄都會(huì)有一個(gè)時(shí)間標(biāo)識(shí),如果客戶(hù)端記錄沒(méi)給這個(gè)時(shí)間,influxdb會(huì)提供。主鍵是由time + tag組成,是不可以重復(fù)的,如果重復(fù),后面的將覆蓋前面的。 相同的 measurement,tagset 和 timestamp 的數(shù)據(jù)會(huì)覆蓋。 解決方法就是提高時(shí)間精度到納秒。或者增加tag來(lái)標(biāo)識(shí)不同的點(diǎn)。

四、influxdb保留策略(RP)

什么是保留策略?

用來(lái)定義數(shù)據(jù)在InfluxDB中存放的時(shí)間,就是保留策略,過(guò)了這個(gè)時(shí)間,數(shù)據(jù)過(guò)期會(huì)自動(dòng)刪除。 一個(gè)數(shù)據(jù)庫(kù)可以有多個(gè)保留策略,但每個(gè)策略必須是獨(dú)一無(wú)二的。 保留策略實(shí)際就類(lèi)似于Mysql中的定時(shí)任務(wù)

//查看數(shù)據(jù)保存策略(建議使用第二種)
show retention policies on "數(shù)據(jù)庫(kù)名稱(chēng)"
show retention policies
/**
* 創(chuàng)建數(shù)據(jù)保留策略
* h(小時(shí)),d(天),w(星期)
*/
//CREATE RETENTION POLICY "保留策略名稱(chēng)" ON "數(shù)據(jù)庫(kù)名稱(chēng)" DURATION "該保留策略對(duì)應(yīng)的數(shù)據(jù)過(guò)期時(shí)間" REPLICATION "復(fù)制因子,開(kāi)源的InfluxDB單機(jī)環(huán)境永遠(yuǎn)為1" SHARD DURATION "分片組的默認(rèn)時(shí)長(zhǎng)" DEFAULT
//DEFAULT是默認(rèn)保存策略,一個(gè)庫(kù)中只有一個(gè)默認(rèn)保存策略。
create retention policy "testPolice" on myInfluxdb duration 72h    replication 1 SHARD DURATION 1h default
//修改保留策略
alter retention policy "保留策略名稱(chēng)" on "數(shù)據(jù)庫(kù)名稱(chēng)" duration 1d
//刪除保留策略
drop retention policy "保留策略名稱(chēng)" on "數(shù)據(jù)庫(kù)名稱(chēng)"

備注:如果查詢(xún)influxdb沒(méi)數(shù)據(jù),一定要在表名加上保存策略。

五、influxdb連續(xù)查詢(xún)(CQ)

什么是連續(xù)查詢(xún)? 它會(huì)按照用戶(hù)指定的查詢(xún)規(guī)則,自動(dòng)地、周期地查詢(xún)實(shí)時(shí)數(shù)據(jù)并執(zhí)行指定運(yùn)算,然后將查詢(xún)結(jié)果保存在一張指定的表中。

舉個(gè)例子來(lái)理解連續(xù)查詢(xún):現(xiàn)有CPU使用率數(shù)據(jù)分鐘級(jí)別,需要把分鐘級(jí)別的數(shù)據(jù)匯聚成小時(shí)級(jí)別的(生成的小時(shí)級(jí)別數(shù)據(jù)插入小時(shí)表中)。 我們只需要?jiǎng)?chuàng)建個(gè)連續(xù)查詢(xún),influxdb會(huì)自動(dòng)實(shí)時(shí)的把數(shù)據(jù)插入到小時(shí)表中。

注意:保存策略和連續(xù)查詢(xún)往往配合使用的。

用一個(gè)需求更加理解保存策略和連續(xù)查詢(xún)的用法:

1、把分鐘級(jí)別數(shù)據(jù)保存兩個(gè)小時(shí)。

2、把小時(shí)級(jí)別數(shù)據(jù)保存10周

實(shí)現(xiàn)方式:

//創(chuàng)建分鐘級(jí)別的保存策略:two_hours是策略名稱(chēng),rightcloud是庫(kù)名,
CREATE RETENTION POLICY "two_hours" ON "rightcloud" DURATION 2h REPLICATION 1
//創(chuàng)建小時(shí)級(jí)別的保存策略:a_year是策略名稱(chēng),rightcloud是庫(kù)名
CREATE RETENTION POLICY "a_year" ON "rightcloud" DURATION 10w REPLICATION 1
//創(chuàng)建連續(xù)查詢(xún):con_query連續(xù)查詢(xún)名稱(chēng)
CREATE CONTINUOUS QUERY "con_query" ON "rightcloud" BEGIN
  SELECT mean("value") AS "value"
  INTO "a_year"."cpu_usage"
  FROM "autogen"."cpu_usage"
  GROUP BY time(10s)
END
//注意:分鐘級(jí)別數(shù)據(jù)和小時(shí)級(jí)別數(shù)據(jù)都是保存在cpu_usage表中,是通過(guò)保存策略來(lái)區(qū)分開(kāi)的,在查詢(xún)表數(shù)據(jù)時(shí),一定要加上策略名稱(chēng)
select * from "a_year"."cpu_usage";
select * from "autogen"."cpu_usage";

六、SpringBoot整合influxdb

1、引入maven

server:
  port: 8080
spring:
  influx:
    url: http://127.0.0.1:8086 #influxdb服務(wù)器的地址
    username:  #用戶(hù)名
    password:  #密碼
    database: rightcloud #指定的數(shù)據(jù)庫(kù)
    retention_policy: autogen

2、application.yml

server:  port: 8080spring:  influx:    url: //127.0.0.1:8086 #influxdb服務(wù)器的地址    username:  #用戶(hù)名    password:  #密碼    database: rightcloud #指定的數(shù)據(jù)庫(kù)    retention_policy: autogen

3、InfluxdbConfig配置類(lèi)

import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
/**
 * influxdb配置文件
 */
@Configuration
public class InfluxdbConfig {
    @Value("${spring.influx.url}")
    private String influxDBUrl;
    @Value("${spring.influx.username}")
    private String userName;
    @Value("${spring.influx.password}")
    private String password;
    @Value("${spring.influx.retention_policy}")
    private String retention_policy;
    @Value("${spring.influx.database}")
    private String database;
    @Bean
    public InfluxDB influxdb() {
        InfluxDB influxDB = null;
        if (StringUtils.isEmpty(userName)) {
            influxDB = InfluxDBFactory.connect(influxDBUrl);
        } else {
            influxDB = InfluxDBFactory.connect(influxDBUrl, userName, password);
        }
        try {
            /**
             * 異步插入:
             * enableBatch這里第一個(gè)是point的個(gè)數(shù),第二個(gè)是時(shí)間,單位毫秒
             * point的個(gè)數(shù)和時(shí)間是聯(lián)合使用的,如果滿(mǎn)100條或者60 * 1000毫秒
             * 滿(mǎn)足任何一個(gè)條件就會(huì)發(fā)送一次寫(xiě)的請(qǐng)求。
             */
//            influxDB.setDatabase(database).enableBatch(100, 1000 * 60, TimeUnit.MILLISECONDS);
            influxDB.setDatabase(database);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //設(shè)置默認(rèn)策略
            this.retention_policy = retention_policy == null || "".equals(retention_policy) ? "autogen" : retention_policy;
            influxDB.setRetentionPolicy(retention_policy);
        }
        //設(shè)置日志輸出級(jí)別
        influxDB.setLogLevel(InfluxDB.LogLevel.BASIC);
        return influxDB;
    }
}

4、InfluxDBUtils工具類(lèi),提供增刪改查方法

import org.influxdb.InfluxDB;
import org.influxdb.annotation.Column;
import org.influxdb.annotation.Measurement;
import org.influxdb.dto.BatchPoints;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
 *
 */
@Component
public class InfluxDBUtils {
    @Autowired
    private InfluxDB influxDB;
    @Value("${spring.influx.database}")
    private String database;
    /**
     * 插入單條數(shù)據(jù)寫(xiě)法1
     *
     * @param measurement
     */
    public void insertOne01(String measurement) {
        //構(gòu)建
        Point.Builder builder = Point.measurement(measurement);
        //可指定時(shí)間戳
        builder.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
        //tag屬性只能存儲(chǔ)String類(lèi)型
        builder.tag("name", "zhanggang");
        //設(shè)置field
        builder.addField("filed", "fileValue");
        influxDB.write(builder.build());
    }
    /**
     * 插入單條數(shù)據(jù)寫(xiě)法2
     *
     * @param measurement
     */
    public void insertOne02(String measurement, Map<String, String> tags, Map<String, Object> fields) {
        //構(gòu)建
        Point.Builder builder = Point.measurement(measurement);
        //可指定時(shí)間戳
        builder.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
        //tag屬性只能存儲(chǔ)String類(lèi)型
        builder.tag(tags);
        //設(shè)置field
        builder.fields(fields);
        influxDB.write(builder.build());
    }
    /**
     * 插入單條數(shù)據(jù)
     * influxDB開(kāi)啟UDP功能, 默認(rèn)端口:8089,默認(rèn)數(shù)據(jù)庫(kù):udp,沒(méi)提供代碼傳數(shù)據(jù)庫(kù)功能接口
     * 使用UDP的原因
     * TCP數(shù)據(jù)傳輸慢,UDP數(shù)據(jù)傳輸快。
     * 網(wǎng)絡(luò)帶寬需求較小,而實(shí)時(shí)性要求高。
     * InfluxDB和服務(wù)器在同機(jī)房,發(fā)生數(shù)據(jù)丟包的可能性較小,即使真的發(fā)生丟包,對(duì)整個(gè)請(qǐng)求流量的收集影響也較小。
     *
     * @param measurement
     * @param tags
     * @param fields
     */
    public void insertUDPOne03(String measurement, Map<String, String> tags, Map<String, Object> fields) {
        //構(gòu)建
        Point.Builder builder = Point.measurement(measurement);
        //可指定時(shí)間戳
        builder.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
        //tag屬性只能存儲(chǔ)String類(lèi)型
        builder.tag(tags);
        //設(shè)置field
        builder.fields(fields);
        int udpPort = 8089;
        influxDB.write(udpPort, builder.build());
    }
    //批量插入1
    public void insertBatchByRecords() {
        List<String> lines = new ArrayList<String>();
        String measurement = "test-inset-one";
        for (int i = 0; i < 2; i++) {
            Point.Builder builder = Point.measurement(measurement);
            //tag屬性只能存儲(chǔ)String類(lèi)型
            builder.tag("name", "zhanggang" + i);
            //設(shè)置field
            builder.addField("filed", "fileValue" + i);
            lines.add(builder.build().lineProtocol());
        }
        influxDB.write(lines);
    }
    //批量插入2
    public void insertBatchByPoints() {
        BatchPoints batchPoints = BatchPoints.database(database)
                .consistency(InfluxDB.ConsistencyLevel.ALL)
                .build();
        String measurement = "test-inset-one";
        for (int i = 0; i < 2; i++) {
            Point.Builder builder = Point.measurement(measurement);
            //tag屬性只能存儲(chǔ)String類(lèi)型
            builder.tag("name", "zhanggang" + i);
            //設(shè)置field
            builder.addField("filed", "fileValue" + i);
            batchPoints.point(builder.build());
        }
        influxDB.write(batchPoints);
    }
    /**
     * 查詢(xún),返回Map集合
     *
     * @param query 完整的查詢(xún)語(yǔ)句
     * @return
     */
    public List<Map<String, Object>> fetchRecords(String query) {
        List<Map<String, Object>> results = new ArrayList<>();
        QueryResult queryResult = influxDB.query(new Query(query, database));
        queryResult.getResults().forEach(result -> {
            result.getSeries().forEach(serial -> {
                List<String> columns = serial.getColumns();
                int fieldSize = columns.size();
                serial.getValues().forEach(value -> {
                    Map<String, Object> obj = new HashMap<String, Object>();
                    for (int i = 0; i < fieldSize; i++) {
                        obj.put(columns.get(i), value.get(i));
                    }
                    results.add(obj);
                });
            });
        });
        return results;
    }
    /**
     * 批量寫(xiě)入數(shù)據(jù)
     *
     * @param database        數(shù)據(jù)庫(kù)
     * @param retentionPolicy 保存策略
     * @param consistency     一致性
     * @param records         要保存的數(shù)據(jù)(調(diào)用BatchPoints.lineProtocol()可得到一條record)
     */
    public void batchInsert(final String database, final String retentionPolicy,
                            final InfluxDB.ConsistencyLevel consistency, final List<String> records) {
        influxDB.write(database, retentionPolicy, consistency, records);
    }
    /**
     * 查詢(xún)
     *
     * @param command 查詢(xún)語(yǔ)句
     * @return
     */
    public QueryResult query(String command) {
        return influxDB.query(new Query(command, database));
    }
    /**
     * 創(chuàng)建數(shù)據(jù)保留策略
     * 設(shè)置數(shù)據(jù)保存策略 defalut 策略名 /database 數(shù)據(jù)庫(kù)名/ 30d 數(shù)據(jù)保存時(shí)限30天/ 1 副本個(gè)數(shù)為1/ 結(jié)尾DEFAULT
     * 表示 設(shè)為默認(rèn)的策略
     */
    public void createRetentionPolicy() {
        String command = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT",
                "defalut", database, "30d", 1);
        this.query(command);
    }
 }

5、在Controller類(lèi)進(jìn)行操作

@RestController
public class InfluxDBController {
    @Autowired
    private InfluxDBUtils influxDBUtils;
    @GetMapping("/insertOne")
    public String insertOne() {
        String measurement = "test-inset-one";
        influxDBUtils.insertOne01(measurement);
        return "success";
    }
    @GetMapping("/query01")
    public List<Map<String, Object>> query01() {
        String sql = "SELECT * FROM \"test-inset-one\"   TZ('Asia/Shanghai')";
        return influxDBUtils.fetchRecords(sql);
    }

七、influxdb圖形化界面客戶(hù)端

InfluxDB Studio工具圖形化界面操作Influxdb

在這里插入圖片描述

到此這篇關(guān)于influxdb數(shù)據(jù)庫(kù)常用命令及SpringBoot整合的文章就介紹到這了,更多相關(guān)influxdb數(shù)據(jù)庫(kù)常用命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何讓你的SQL運(yùn)行得更快

    如何讓你的SQL運(yùn)行得更快

    如何讓你的SQL運(yùn)行得更快...
    2007-06-06
  • 使用DataGrip連接Hive的詳細(xì)步驟

    使用DataGrip連接Hive的詳細(xì)步驟

    這篇文章主要介紹了DataGrip連接Hive的詳細(xì)圖文教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Navicat最新版安裝詳細(xì)教程(超簡(jiǎn)單)

    Navicat最新版安裝詳細(xì)教程(超簡(jiǎn)單)

    Navicat最新版增加Redis連接功能,支持多種數(shù)據(jù)庫(kù)管理,安裝步驟包括下載、解壓、復(fù)制dll文件和啟動(dòng)軟件,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 利用reverse索引優(yōu)化like語(yǔ)句的方法詳解

    利用reverse索引優(yōu)化like語(yǔ)句的方法詳解

    這篇文章主要介紹了關(guān)于利用reverse索引優(yōu)化like語(yǔ)句的方法,文中通過(guò)圖文介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • 詳解PyMySQL插入字典類(lèi)型的數(shù)據(jù)

    詳解PyMySQL插入字典類(lèi)型的數(shù)據(jù)

    在我們爬蟲(chóng)或者調(diào)API獲取數(shù)據(jù)后,需要將數(shù)據(jù)存入到數(shù)據(jù)庫(kù)中,如果數(shù)據(jù)是列表嵌套字典格式的話(huà),一般做法是遍歷列表,然后用字典生成對(duì)應(yīng)的SQL語(yǔ)句再執(zhí)行插入到表中,本文將介紹一種更加簡(jiǎn)便的方法來(lái)插入字典類(lèi)型的數(shù)據(jù),需要的朋友可以參考下
    2022-07-07
  • windows環(huán)境下python連接openGauss數(shù)據(jù)庫(kù)的全過(guò)程

    windows環(huán)境下python連接openGauss數(shù)據(jù)庫(kù)的全過(guò)程

    openGauss是一款全面友好開(kāi)放,攜手伙伴共同打造的企業(yè)級(jí)開(kāi)源關(guān)系型數(shù)據(jù)庫(kù),這篇文章主要給大家介紹了關(guān)于windows環(huán)境下python連接openGauss數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • SQL中過(guò)濾條件放on和where中的區(qū)別詳解

    SQL中過(guò)濾條件放on和where中的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于SQL中過(guò)濾條件放on和where中的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2019-01-01
  • 詳解Unique SQL原理和應(yīng)用

    詳解Unique SQL原理和應(yīng)用

    以一定的算法結(jié)合解析樹(shù)中的各結(jié)點(diǎn),計(jì)算出來(lái)一個(gè)整數(shù)值,用來(lái)唯一標(biāo)識(shí)這一類(lèi)SQL,這個(gè)整數(shù)值被稱(chēng)為Unique SQL ID,Unique SQL ID相同的SQL語(yǔ)句屬于同一個(gè)“Unique SQL”。
    2021-05-05
  • 2023年最新Navicat永久激活安裝使用教程

    2023年最新Navicat永久激活安裝使用教程

    Navicat中文版是強(qiáng)大的可視化數(shù)據(jù)庫(kù)管理工具,用于開(kāi)發(fā)和管理MySQL|SQL?Server|SQLite|Oracle等數(shù)據(jù)庫(kù),Navicat以直覺(jué)化的圖形用戶(hù)界面符合數(shù)據(jù)庫(kù)管理員、開(kāi)發(fā)人員及中小企業(yè)的需要,本文給大家分享2023年最新Navicat永久激活安裝使用教程,感興趣的朋友一起看看吧
    2023-05-05
  • SQLServer與Access常用SQL函數(shù)區(qū)別

    SQLServer與Access常用SQL函數(shù)區(qū)別

    SQLServer Access SQL函數(shù)
    2009-06-06

最新評(píng)論

靖宇县| 昌平区| 郑州市| 金湖县| 英德市| 余江县| 永安市| 抚顺县| 山东| 静宁县| 沙雅县| 台南市| 嵩明县| 九江县| 介休市| 项城市| 讷河市| 额敏县| 科技| 白河县| 莱芜市| 海林市| 临夏市| 博客| 乐至县| 昌都县| 宁强县| 德惠市| 平湖市| 枣庄市| 温州市| 泰顺县| 谢通门县| 杂多县| 墨玉县| 周至县| 屯门区| 凤山市| 阿图什市| 平原县| 涞源县|