認識Influxdb時序數據庫及Influxdb基礎命令操作
一、什么是Influxdb,什么又是時序數據庫
- Influxdb是一個用於存儲時間序列,事件和指標的開源數據庫,由Go語言編寫而成,無需外部依賴。
- 什么是時間序列數據庫?就是基於時間存儲的數據,數據格式里包含Timestamp字段的數據,即每一條數據中都會有一個時間存儲字段。
二、Influxdb能用來做什么
Influxdb(時序數據庫)主要的應用場景有以下幾種:
- 很多物聯網數據都通過InfluxDB存儲,分析與展示。如:智慧物聯網監控分析系統,傳統石油化工、采礦以及制造企業設備數據采集與分析,醫療數據采集與分析,車聯網,智慧交通等。
- InfluxDB同時還應用於日志存儲、監控數據統計和分析。如:各種服務、軟件以及系統監控數據采集、分析與報警,金融數據采集與分析等。記錄每毫秒服務器以及軟件服務的使用情況,用於后期大數據分析,機器學習,實現預測、預警、服務提升優化等。
- 實時大數據量的存儲以及快速查詢,定時歸集指定時間的數據,用於更大時間范圍監控數據的展現。
Influxdb的特性:
- 時間序列數據編寫的自定義高性能數據存儲。TSM引擎允許高攝取速度和數據壓縮。
- 內置HTTP接口,使用方便,簡單,高性能的寫入和查詢HTTP API
- 數據可以打標記,標簽允許對系列進行索引以實現快速有效的查詢
- 類SQL的查詢語句,可輕松查詢聚合數據
- 安裝管理很簡單,並且讀寫數據很高效
- 能夠實時查詢,數據在寫入時被索引后就能夠被立即查出
- 完全用 Go 語言編寫。 它編譯成單個二進制文件,沒有外部依賴項
三、Influxdb與Mysql的基本概念對比
概念 | InfluxDB | MySQL |
數據庫(同) | database | database |
表(不同) | table | measurement |
列(不同 ) | column | tag (帶索引的,非必須)、field(不帶索引)、timestemp(唯一主鍵) |
四、Influxdb有哪些組成結構
- database: 數據庫名,在 InfluxDB 中可以創建多個數據庫,不同數據庫中的數據文件是隔離存放的,存放在磁盤上的不同目錄。
- retention policy: 存儲策略,用於設置數據保留的時間,每個數據庫剛開始會自動創建一個默認的存儲策略 autogen,數據保留時間為永久,之后用戶可以自己設置,例如保留最近2小時的數據。插入和查詢數據時如果不指定存儲策略,則使用默認存儲策略,且默認存儲策略可以修改。InfluxDB 會定期清除過期的數據。
- measurement: 測量指標名,例如 cpu_usage 表示 cpu 的使用率。
- tag sets: tags 在 InfluxDB 中會按照字典序排序,不管是 tagk 還是 tagv,只要不一致就分別屬於兩個 key,例如 host=server01,region=us-west 和 host=server02,region=us-west 就是兩個不同的 tag set。
- field name: 例如上面數據中的 value 就是 fieldName,InfluxDB 中支持一條數據中插入多個 fieldName,這其實是一個語法上的優化,在實際的底層存儲中,是當作多條數據來存儲。
- timestamp: 每一條數據都需要指定一個時間戳,在 TSM 存儲引擎中會特殊對待,以為了優化后續的查詢操作。
說明:
- Point:Point由時間戳(time)、數據(field)、標簽(tags)組成。相當於傳統數據庫里的一行數據;
- tag set:不同的每組tag key和tag value的集合;
- field set:每組field key和field value的集合,列不需要手動創建,加入數據會自動創建;
- Series 相當於是 InfluxDB 中一些數據的集合,在同一個 database 中,retention policy、measurement、tag sets 完全相同的數據同屬於一個 series,同一個 series 的數據在物理上會按照時間順序排列存儲在一起;
- Shard 在 InfluxDB 中是一個比較重要的概念,它和 retention policy 相關聯。每一個存儲策略下會存在許多 shard,每一個 shard 存儲一個指定時間段內的數據,並且不重復,例如 7點-8點 的數據落入 shard0 中,8點-9點的數據則落入 shard1 中。每一個 shard 都對應一個底層的 tsm 存儲引擎,有獨立的 cache、wal、tsm file;
五、怎么快速搭建Influxdb環境,入門Influxdb
- 這里使用docker搭建快速入門,命令如下:
docker run -d -p 8086:8086 --name myinfluxdb influxdb
- 也可以使用docker-compose.yml,便於后期管理,與其他容器結合使用:
version: '3' services: influxdb: image: influxdb restart: always tty: true container_name: influxdb ports: - 8086:8086
六、常用基礎操作
- 進入上述創建的myinfluxdb容器,docker exec -it myinfluxdb bash
- 輸入influx,即進入Influxdb交互式界面:
root@0aba3a348938:/# influx
Connected to http://localhost:8086 version 1.8.0
InfluxDB shell version: 1.8.0
>
3. 常用命令及效果如下:
-- 進入數據庫 use nginx_log; -- 刪除數據庫 drop database nginx_log; -- 顯示數據庫中所有表 SHOW MEASUREMENTS; -- 創建表,直接在插入數據的時候指定表名,自動創建表及列 insert test,host=127.0.0.1,monitor_name=test count=1 -- 查詢10條數據 select * from test limit 10; -- 查看一個measurement中所有的tag key show tag keys -- 查看一個measurement中所有的field key show field keys -- 查看一個measurement中所有的保存策略(可以有多個,一個標識為default) show retention policies; -- 創建存儲策略 create retention policy "rp_name" on "nginx_log" duration 3w replication 1 default rp_name:策略名; db_name:具體的數據庫名; 3w:保存3周,3周之前的數據將被刪除,influxdb具有各種事件參數,比如:h(小時),d(天),w(星期); replication 1:副本個數,一般為1就可以了; default:設置為默認策略 -- 修改存儲策略 alter retention policy "rp_name" on "nginx_log" duration 30d default -- 刪除存儲策略 drop retention policy "rp_name" on "nginx_log" -- 刪除表 drop measurement test