時序型數據庫
時序數據庫就是存放事件序列數據的數據庫,需要支持時序數據的快速寫入、持久化、多維度的聚合查詢等基本功能。
時間序列數據
時間序列數據是基於時間的一系列數據。在有時間的坐標中將這些數據點連成線,往過去看可以做成多緯度報表,揭示其趨勢性、規律性、異常性;往未來看可以做大數據分析,機器學習,實現預測和預警。
數據寫入
- 寫入平穩、持續、高並發和高吞吐:時序數據的寫入是比較平穩的,這點與應用數據不同,應用數據通常與應用的訪問量成正比,而應用的訪問量通常存在波峰波谷。時序數據的產生通常是以一個固定的時間頻率產生,不會受其他因素的制約,其數據生成的速度是相對比較平穩的。
- 寫多讀少:時序數據上95%-99%的操作都是寫操作,是典型的寫多讀少的數據。這與其數據特性相關,例如監控數據,你的監控項可能很多,但是你真正去讀的可能比較少,通常只會關心幾個特定的關鍵指標或者在特定的場景下才會去讀數據。
- 實時寫入、無更新:時序數據的寫入是實時的,且每次寫入都是最近生成的數據,這與其數據生成的特點相關,因為其數據生成是隨着時間推進的,而新生成的數據會實時的進行寫入。數據寫入無更新,在時間這個維度上,隨着時間的推進,每次數據都是新數據,不會存在舊數據的更新,不過不排除人為的對數據做訂正。
數據查詢
- 按時間范圍讀取
- 最近的數據被讀取的概率高
- 歷史數據粗粒度查詢的概率高
- 多種精度查詢
- 多維度分析
數據存儲
- 數據量大:拿監控數據來舉例,如果我們采集的監控數據的時間間隔是1s,那一個監控項每天會產生86400個數據點,若有10000個監控項,則一天就會產生864000000個數據點。在物聯網場景下,這個數字會更大。整個數據的規模,是TB甚至是PB級的。
- 冷熱分明:時序數據有非常典型的冷熱特征,越是歷史的數據,被查詢和分析的概率越低。 具有時效性:時序數據具有時效性,數據通常會有一個保存周期,超過這個保存周期的數據可以認為是失效的,可以被回收。一方面是因為越是歷史的數據,可利用的價值越低;另一方面是為了節省存儲成本,低價值的數據可以被清理。
- 多精度數據存儲:在查詢的特點里提到時序數據出於存儲成本和查詢效率的考慮,會需要一個多精度的查詢,同樣也需要一個多精度數據的存儲。
InfluxDB
InfluxDB是什么
- InfluxDB 是用Go語言編寫的一個開源分布式時序、事件和指標數據庫,無需外部依賴
- InfluxDB在DB-Engines的時序數據庫類別里排名第一
InfluxDB相關概念
- Database:InfluxDB可以創建數據庫,一個數據庫可以包含多個user、保存策略、schemaless ,支持隨時靈活創建mersurement
- Measurement:相當於表的概念;
- Tags:是一些kv的結構,標簽會被用來建立索引;
- Fields:是保存真實數據的結構,也是kv結構,但是不會被用來建立索引;
- Point: 代表了一條記錄,可以理解為關系型數據庫中的一條記錄;
- Timestamp:既然InfluxDB被稱之為時序數據庫,少了時間是不可能的,每條記錄必須要有一個時間戳;
- Series:是由Measurement+Tags組成的
InfluxDB的優點
InfluxDB 自帶的各種特殊函數如求標准差,隨機取樣數據,統計數據變化比等,使數據統計和實時分析變得十分方便。 此外它還有如下特性:
- 內置 HTTP 接口,使用方便
- 數據可以打標記,這樣查詢可以很靈活
- 類 SQL 的查詢語句
- 安裝管理很簡單,並且讀寫數據很高效
- 能夠實時查詢,數據在寫入時被索引后就能夠被立即查出
InfluxDB版本
InfluxDB目前推出了2.0版本,由於改動較大,所以和1.x版本並存。目前官方推薦的 穩定版本依舊是1.x版本。2.0主要的更改包括以下內容:
- 集成了TICK組件,一鍵安裝
- 安全集成,所有的請求都需要通過token
- 集成管理頁面,支持更為強大的統計和分析功能
- 支持新的查詢語言Flux,提供更為強大的查詢和處理功能
- 增加了面向IoT和邊緣計算的功能,能夠在 ingestion point 匯總和分析時間序列數據
- 啟動了新的存儲引擎InfluxDB Iox,采用Rust語言編寫
使用 Docker 從 InfluxDB 1.x 升級到 2.1 |InfluxDB OSS 2.1 文檔 (influxdata.com)
安裝InfluxDB 2.0版本
安裝 InfluxDB |InfluxDB OSS 2.1 文檔 (influxdata.com)
創建一個新目錄來存儲數據,然后導航到該目錄
mkdir -p /mydata/influxdb/influxdb-docker-data-volume && cd $_
在主機文件系統上生成默認配置文件
docker run \ --rm influxdb:2.1.1 \ influxd print-config > config.yml
再重新啟動InfluxDB 容器
docker run -p 8086:8086 --name influxdb2 \ -v $PWD/config.yml:/etc/influxdb2/config.yml \ -v $PWD:/var/lib/influxdb2 \ -d influxdb:2.1.1
開放端口8086
開放8086端口
firewall-cmd --zone=public --add-port=8086/tcp --permanent
配置立即生效
firewall-cmd --reload
設置 InfluxDB
influxDB 的初始設置過程將逐步完成創建默認組織、用戶、存儲桶和操作員 API 令牌的過程
運行成功后登錄:http://127.0.0.1:8086/
第一次登錄,輸入賬號密碼等信息
界面查看token
命令進入容器
docker exec -it influxdb2 /bin/bash
為避免必須使用每個命令傳遞 InfluxDB API 令牌,請設置配置文件來存儲憑據
在終端中,運行以下命令:
influx config create -n default \
-u http://localhost:8086 \
-o my-org \
-t wjk4yyPaabbq7cG9hU3Ak-61i8hqOuuFtUWdtJYex9h55BgPjOLgPsANQjYlmHj6GVHx_RafAZlU4O4UnPvvCQ== \
-a
influx config ls
使用令牌
export INFLUX_TOKEN=wjk4yyPaabbq7cG9hU3Ak-61i8hqOuuFtUWdtJYex9h55BgPjOLgPsANQjYlmHj6GVHx_RafAZlU4O4UnPvvCQ==
influx write -t $INFLUX_TOKEN -b my-bucket -o my-org "measurement field=1"
其他命令
創建用戶johndoe
influx user create -n johndoe -o my-org
修改johndo密碼
influx user password -n johndoe
插入數據
influx write -b my-bucket -o my-org -p s 'myMeasurement,host=myHost testField="testData" 888'
查數據
influx query -o my-org 'from(bucket:"my-bucket") |> range(start:-1d)'
安裝InfluxDB 1.8版本
1.8版本可以使用dbeaver連接,可視化比較方便
docker run -p 8086:8086 --name influx18 \
-v influxdb:/var/lib/influxdb \
influxdb:1.8
登錄后台
[root@iZbp1bunl8t8qf63wqsy0iZ ~]# docker exec -it influx18 /bin/bash
root@40ce58faab6f:/# influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb > SHOW DATABASES name: databases name ---- _internal mydb > USE mydb Using database mydb > INSERT cpu,host=serverA,region=us_west value=0.64 > SELECT "host", "region", "value" FROM "cpu" name: cpu time host region value ---- ---- ------ ----- 1646909654112201899 serverA us_west 0.64 > INSERT temperature,machine=unit42,type=assembly external=25,internal=37 > SELECT * FROM "temperature" name: temperature time external internal machine type ---- -------- -------- ------- ---- 1646909703830575693 25 37 unit42 assembly >