站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        教你一招搞定時(shí)序數(shù)據(jù)庫在Spring Boot中的使用

        除了最常用的關(guān)系數(shù)據(jù)庫和緩存之外,之前我們已經(jīng)介紹了在Spring Boot中如何配置和使用MongoDB、LDAP這些存儲(chǔ)的案例。接下來,我們繼續(xù)介紹另一種特殊的數(shù)據(jù)庫:時(shí)序數(shù)據(jù)庫InfluxDB在Spring Boot中的使用。

        InfluxDB簡介

        什么是時(shí)序數(shù)據(jù)庫?全稱為時(shí)間序列數(shù)據(jù)庫。時(shí)間序列數(shù)據(jù)庫主要用于指處理帶時(shí)間標(biāo)簽(按照時(shí)間的順序變化,即時(shí)間序列化)的數(shù)據(jù),帶時(shí)間標(biāo)簽的數(shù)據(jù)也稱為時(shí)間序列數(shù)據(jù)。

        時(shí)間序列數(shù)據(jù)主要由電力行業(yè)、化工行業(yè)等各類型實(shí)時(shí)監(jiān)測(cè)、檢查與分析設(shè)備所采集、產(chǎn)生的數(shù)據(jù),這些工業(yè)數(shù)據(jù)的典型特點(diǎn)是:產(chǎn)生頻率快(每一個(gè)監(jiān)測(cè)點(diǎn)一秒鐘內(nèi)可產(chǎn)生多條數(shù)據(jù))、嚴(yán)重依賴于采集時(shí)間(每一條數(shù)據(jù)均要求對(duì)應(yīng)唯一的時(shí)間)、測(cè)點(diǎn)多信息量大(常規(guī)的實(shí)時(shí)監(jiān)測(cè)系統(tǒng)均有成千上萬的監(jiān)測(cè)點(diǎn),監(jiān)測(cè)點(diǎn)每秒鐘都產(chǎn)生數(shù)據(jù),每天產(chǎn)生幾十GB的數(shù)據(jù)量)。雖然關(guān)系型數(shù)據(jù)庫也可以存儲(chǔ)基于時(shí)間序列的數(shù)據(jù),但由于存儲(chǔ)結(jié)構(gòu)上的劣勢(shì),使得這些數(shù)據(jù)無法高效的實(shí)現(xiàn)高頻存儲(chǔ)和查詢統(tǒng)計(jì),因此就誕生了一種專門針對(duì)時(shí)間序列來做存儲(chǔ)和優(yōu)化的數(shù)據(jù)庫,以滿足更高的效率要求。

        InfluxDB就是目前比較流行的開源時(shí)序數(shù)據(jù)庫(官網(wǎng)地址:https://www.influxdata.com/),我們比較常見的使用場(chǎng)景就是一些與時(shí)間相關(guān)的高頻的數(shù)據(jù)記錄和統(tǒng)計(jì)需要,比如:監(jiān)控?cái)?shù)據(jù)的存儲(chǔ)和查詢。

        在進(jìn)行下面的動(dòng)手環(huán)節(jié)之前,先了解一下InfluxDB中的幾個(gè)重要名詞:

        • database:數(shù)據(jù)庫

        • measurement:類似于關(guān)系數(shù)據(jù)庫中的table(表)

        • points:類似于關(guān)系數(shù)據(jù)庫中的row(一行數(shù)據(jù))

        其中,一個(gè)Point由三個(gè)部分組成:

        • time:時(shí)間戳

        • fields:記錄的值

        • tags:索引的屬性

        動(dòng)手試試

        在了解了什么是時(shí)序數(shù)據(jù)庫以及InfluxDB一些基礎(chǔ)概念之后,下面我們通過一個(gè)簡單的定時(shí)上報(bào)監(jiān)控?cái)?shù)據(jù)的小案例,進(jìn)一步理解InfluxDB的基礎(chǔ)配置、數(shù)據(jù)組織和寫入操作!

        第一步:創(chuàng)建一個(gè)基礎(chǔ)的Spring Boot項(xiàng)目(如果您還不會(huì),可以參考這篇文章:快速入門1)

        第二步:在pom.xml中引入influx的官方SDK

        <dependency>     <groupId>org.influxdb</groupId>     <artifactId>influxdb-java</artifactId> </dependency>

        注意:這里因?yàn)镾pring Boot 2.x版本的parent中有維護(hù)InfluxDB的SDK版本,所以不需要手工指明版本信息。如果使用的Spring Boot版本比較老,那么可能會(huì)缺少version信息,就需要手工寫了。

        第三步:配置要連接的influxdb信息

        spring.influx.url=http://localhost:8086 spring.influx.user=admin spring.influx.password=

        三個(gè)屬性分別代表:連接地址、用戶名、密碼。到這一步,基礎(chǔ)配置就完成了。

        注意:雖然沒有spring data的支持,但spring boot 2.x版本中也實(shí)現(xiàn)了InfluxDB的自動(dòng)化配置,所以只需要寫好配置信息,就可以使用了。具體配置屬性可以查看源碼:org.springframework.boot.autoconfigure.influx.InfluxDbProperties。

        第四步:創(chuàng)建定時(shí)任務(wù),模擬上報(bào)數(shù)據(jù),并寫入InfluxDB

        @Service @AllArgsConstructor @Slf4j public class Monitor {      private InfluxDB influxDB;      @Scheduled(fixedRate = 5000)     public void writeQPS() {         // 模擬要上報(bào)的統(tǒng)計(jì)數(shù)據(jù)         int count = (int) (Math.random() * 100);          Point point = Point.measurement("ApiQPS")     // ApiQPS表                 .tag("url", "/hello")  // url字段                 .addField("count", count)        // 統(tǒng)計(jì)數(shù)據(jù)                 .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)  // 時(shí)間                 .build();          // 往test庫寫數(shù)據(jù)         influxDB.write("test", "autogen", point);          log.info("上報(bào)統(tǒng)計(jì)數(shù)據(jù):" + count);     }  }

        測(cè)試驗(yàn)證

        第一步:啟動(dòng)InfluxDB,并通過命令行準(zhǔn)備好要使用的數(shù)據(jù)庫,主要涉及的命令如下;

        進(jìn)入InfluxDB:

        $ influx

        查詢當(dāng)前存在的數(shù)據(jù)庫:

        > show databases

        創(chuàng)建數(shù)據(jù)庫(注意數(shù)據(jù)庫名稱與上面Java代碼中write的第一個(gè)參數(shù)一致):

        > create database "test"

        第二步:啟動(dòng)Spring Boot應(yīng)用,在定時(shí)任務(wù)的作用下,我們會(huì)看到類似下面的日志:

        2021-08-03 01:52:47.732  INFO 94110 --- [           main] c.d.chapter63.Chapter63Application       : Started Chapter63Application in 2.326 seconds (JVM running for 3.027) 2021-08-03 01:52:47.764  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上報(bào)統(tǒng)計(jì)數(shù)據(jù):25 2021-08-03 01:52:52.736  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上報(bào)統(tǒng)計(jì)數(shù)據(jù):30 2021-08-03 01:52:57.737  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上報(bào)統(tǒng)計(jì)數(shù)據(jù):38 2021-08-03 01:53:02.739  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上報(bào)統(tǒng)計(jì)數(shù)據(jù):51 2021-08-03 01:53:07.739  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上報(bào)統(tǒng)計(jì)數(shù)據(jù):31

        第三步:通過命令,查看一下InfluxDB中是否已經(jīng)存在這些數(shù)據(jù)

        > select * from ApiQPS order by time desc;  name: ApiQPS time                count url ----                ----- --- 1627926787730000000 31    /hello 1627926782730000000 51    /hello 1627926777729000000 38    /hello 1627926772727000000 30    /hello 1627926767728000000 25    /hello

        可以看到,已經(jīng)存在與日志中一樣的數(shù)據(jù)了。

        好了,今天的教程到這里結(jié)束了,記得自己動(dòng)手試試哦!

        相關(guān)視頻教程推薦:Java視頻教程

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 久久精品免费一区二区三区| 久久精品国产99国产精品| 四虎最新永久在线精品免费| 亚洲精品无码久久久久| 99热这里只有精品6国产免费| 精品国产v无码大片在线观看| 四库影院永久四虎精品国产 | 欧美国产日本精品一区二区三区 | 国产精品成人va在线观看| 无码精品久久久天天影视 | 国产精品高清免费网站| 国产成人精品免费视频大全麻豆| 亚洲国产精品高清久久久| 欧美精品亚洲人成在线观看| 国产精品乱码一区二区三区| 青青草国产精品久久| 国产午夜精品一区理论片| 99精品一区二区三区无码吞精| 无码精品国产VA在线观看| 精品国产午夜肉伦伦影院| 国内精品99亚洲免费高清| 日韩三级精品| 9久热这里只有精品| 99久久er这里只有精品18| 无码日韩精品一区二区免费暖暖| 久久性精品| 国产免费伦精品一区二区三区| 久久久久四虎国产精品| 国产成人精品亚洲日本在线| 国产精品无码AV一区二区三区| 亚洲AV无码成人网站久久精品大| 亚洲国产精品成人久久蜜臀 | 一色屋精品视频在线观看| 久久久久99精品成人片| 国产A∨免费精品视频| 97视频在线精品国自产拍| 99riav国产精品| 国产99视频精品专区| 国产精品亚洲视频| 久久精品国产亚洲Aⅴ香蕉| 欧美 日韩 精品 另类视频|