站長資訊網
        最全最豐富的資訊網站

        教你一招搞定時序數據庫在Spring Boot中的使用

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

        InfluxDB簡介

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

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

        InfluxDB就是目前比較流行的開源時序數據庫(官網地址:https://www.influxdata.com/),我們比較常見的使用場景就是一些與時間相關的高頻的數據記錄和統計需要,比如:監控數據的存儲和查詢。

        在進行下面的動手環節之前,先了解一下InfluxDB中的幾個重要名詞:

        • database:數據庫

        • measurement:類似于關系數據庫中的table(表)

        • points:類似于關系數據庫中的row(一行數據)

        其中,一個Point由三個部分組成:

        • time:時間戳

        • fields:記錄的值

        • tags:索引的屬性

        動手試試

        在了解了什么是時序數據庫以及InfluxDB一些基礎概念之后,下面我們通過一個簡單的定時上報監控數據的小案例,進一步理解InfluxDB的基礎配置、數據組織和寫入操作!

        第一步:創建一個基礎的Spring Boot項目(如果您還不會,可以參考這篇文章:快速入門1)

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

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

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

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

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

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

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

        第四步:創建定時任務,模擬上報數據,并寫入InfluxDB

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

        測試驗證

        第一步:啟動InfluxDB,并通過命令行準備好要使用的數據庫,主要涉及的命令如下;

        進入InfluxDB:

        $ influx

        查詢當前存在的數據庫:

        > show databases

        創建數據庫(注意數據庫名稱與上面Java代碼中write的第一個參數一致):

        > create database "test"

        第二步:啟動Spring Boot應用,在定時任務的作用下,我們會看到類似下面的日志:

        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          : 上報統計數據:25 2021-08-03 01:52:52.736  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上報統計數據:30 2021-08-03 01:52:57.737  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上報統計數據:38 2021-08-03 01:53:02.739  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上報統計數據:51 2021-08-03 01:53:07.739  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上報統計數據:31

        第三步:通過命令,查看一下InfluxDB中是否已經存在這些數據

        > 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

        可以看到,已經存在與日志中一樣的數據了。

        好了,今天的教程到這里結束了,記得自己動手試試哦!

        相關視頻教程推薦:Java視頻教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 在线观看自拍少妇精品| 久久久国产精品| 国内精品视频在线观看| 国产三级精品三级在线专区1 | 欧美亚洲精品在线| 人妻熟妇乱又伦精品视频| 久久精品一区二区影院| 亚洲国产精品免费视频| 国产精品免费AV片在线观看| 日本熟妇亚洲欧美精品区| 国产高清在线精品一区二区| 国产福利91精品一区二区三区| 日韩国产精品无码一区二区三区| 久久国产综合精品五月天| 国产精品欧美亚洲韩国日本久久| 国产精品一久久香蕉产线看| 国产欧美精品AAAAAA片| 亚洲精品V欧洲精品V日韩精品| 日韩午夜高清福利片在线观看欧美亚洲精品suv| 亚洲精品免费视频| 久久精品一区二区三区不卡| 1024国产欧美日韩精品| 2018国产精华国产精品| japanese乱人伦精品| 国产在线精品免费aaa片| 亚洲AV永久无码精品网站在线观看| 女人高潮内射99精品| 久久久久国产精品嫩草影院| 国自产精品手机在线观看视频| 国产高清在线精品一区二区 | 国产第一福利精品导航| 97久久精品人妻人人搡人人玩| 精品福利视频一区二区三区| 老司机亚洲精品影院无码| 亚洲av午夜福利精品一区| 无码国产精品一区二区免费3p| 无码人妻精品一区二区三区久久久 | 久久久久九九精品影院| 精品国产香蕉伊思人在线在线亚洲一区二区 | 91麻豆精品视频| 99精品视频在线观看免费|