一、基本概念
InfluxDB 是一款開源的分散式時序資料庫,採用 Go 語言編寫。在 InfluxDB 中,數據被組織為不同的時間序列(time series),每個時間序列由一個時間戳和一個或多個鍵值對組成。
時間戳表示數據被寫入資料庫的時間,通常使用 Unix 時間戳表示。鍵值對分別表示數據的標籤(tag)和數值(field)。標籤用於標識數據,而欄位則表示數據本身的數值。每個時間序列由唯一的時間戳和標籤組成,欄位則可以有多個。
二、數據結構
InfluxDB 中有三種數據結構:database,measurement 和 field。database 表示資料庫,measurement 表示一組有關係的時間序列,而 field 則是一條時間序列中的一個鍵值對。
在 InfluxDB 中,資料庫用於存儲不同的時間序列,一個資料庫可以包含多個 measurement。每個 measurement 是由標籤、欄位和時間戳組成的數據集合,標籤用於標識數據,欄位則表示數據本身的數值,時間戳表示數據的寫入時間。
在 measurement 中,標籤和欄位是必須的,每個 measurement 至少有一個標籤和一個欄位。例如,在存儲氣象數據時,可以將氣象站 ID 作為標籤,溫度和濕度作為欄位。
三、查詢語法
InfluxDB 支持多種查詢方法,包括 SELECT、SHOW 和 DROP 等語句。
1. SELECT 語句
SELECT 語句用於從資料庫中查詢數據。
SELECT [DISTINCT] [*|field_key|function()|] FROM [WHERE ='' [AND ='']] [GROUP BY ] [ORDER BY time DESC|ASC] [LIMIT ]| [OFFSET ]]
SELECT 語句中,FROM 關鍵字後面需要指定要查詢的 measurement 名稱。WHERE 關鍵字用於對數據進行過濾,可以針對標籤和時間進行過濾。GROUP BY 關鍵字根據指定的標籤,對查詢結果進行分組,time 列默認是一種特殊的標籤,可以通過 GROUP BY time() 對數據進行按時間間隔分組。
以下是一個例子:
SELECT mean("temperature") AS "mean_temperature" FROM "weather" WHERE "location"='beijing' AND time >= now() - 1d group by time(10m)
該語句使用了 mean 函數對 temperature 欄位進行平均值計算,並針對 location=’beijing’ ,在過去一天內查詢每隔 10 分鐘的平均氣溫。
2. SHOW 語句
SHOW 語句用於顯示資料庫、measurement、欄位等對象的信息。
SHOW [DATABASES|FIELD KEYS|TAG KEYS|MEASUREMENTS []]
以下是一個例子:
SHOW MEASUREMENTS ON "mydb"
該語句顯示 mydb 資料庫中的所有 measurement 名稱。
3. DROP 語句
DROP 語句用於刪除 InfluxDB 中的數據、measurement 和資料庫等對象。
DROP [, ] FROM
以下是一個例子:
DROP SERIES FROM "weather" WHERE "location"='beijing'
該語句刪除 weather 資料庫中,location=’beijing’ 的數據。
四、批量寫入數據
InfluxDB 支持批量寫入數據,提高了寫入效率。
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary ' cpu,host=server01,region=us-west value=0.64 1434067467000000000 cpu,host=server02,region=us-west value=0.63 1434067467000000000 cpu,host=server03,region=us-west value=0.65 1434067467000000000 '
該語句將三條數據分別寫入 cpu 表格中,其中 host 和 region 是標籤,value 是欄位,1434067467000000000是時間戳。
五、高級特性
1. InfluxQL Functions
InfluxDB 支持多種函數,包括聚合函數、數學函數、字元串函數等。
SELECT COUNT("temperature"), MEAN("humidity") FROM "weather" WHERE time <= now() - 1h GROUP BY time(10m) fill(0)
該語句使用 COUNT 和 MEAN 函數計算出每隔10分鐘的氣溫數量和平均濕度,並將結果填充為 0。
2. InfluxDB 持續查詢
InfluxDB 允許用戶創建持續查詢,以定期執行 SELECT 語句。
CREATE CONTINUOUS QUERY ON BEGIN SELECT mean("temperature") AS "mean_temperature" INTO "rollup_5m_temperature" FROM "weather" GROUP BY time(5m), "location" END
該語句創建了一個名為 rollup_5m_temperature 的 measurement,每隔5分鐘,將10分鐘內的氣溫數據進行平均值計算,並按照 location 進行分組。
六、總結
InfluxDB 是一款優秀的時序資料庫,支持靈活的數據結構和多種查詢方法,支持批量寫入和持續查詢,使用時需要根據實際需求選擇適當的語法進行操作。
原創文章,作者:LBUNN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/371835.html