除了最常用的關聯式資料庫和快取之外,之前我們已經介紹了在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影片教學
#以上是教你一招搞定時序資料庫在Spring Boot中的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

WebStorm Mac版
好用的JavaScript開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。