標籤:value duration 重複 function 不重複 字典 port cpu alter
InfluxDB基本概念資料格式
在 InfluxDB 中,我們可以粗略的將要存入的一條資料看作一個虛擬 key 和其對應的 value(field value)。格式如下:
cpu_usage,host=server01,region=hn-zhengzhou value=0.64 1434055562000000000
虛擬 key 包括以下幾個部分: database, retention policy, measurement, tag sets, field name, timestamp。
- database:資料庫名,在InfluxDB中,可以建立多個database,不同資料庫中的資料檔案是隔離的,存放在不同磁碟目錄中。
- retention policy:儲存策略,用於設定資料保留的時間每個資料庫剛開始會自動建立一個預設的儲存策略 autogen,資料保留時間為永久,之後使用者可以自己設定,例如保留最近2小時的資料。插入和查詢資料時如果不指定儲存策略,則使用預設儲存策略,且預設儲存策略可以修改。InfluxDB 會定期清除到期的資料
- measurement:對應關聯式資料庫中的表,測量指標名,例如 cpu_usage 表示 cpu 的使用率。
- tag sets: tags 在 InfluxDB 中會按照字典序排序,不管是 tagk 還是 tagv,只要不一致就分別屬於兩個 key,例如 host=server01,region=hn-zhengzhou 和 host=server02,region=hn-zhengzhou 就是兩個不同的 tag set。
- tag--標籤,在InfluxDB中,tag是一個非常重要的部分,表名+tag一起作為資料庫的索引,是“key-value”的形式。
- field name: 例如上面資料中的 value 就是 fieldName,InfluxDB 中支援一條資料中插入多個 fieldName,這其實是一個文法上的最佳化,在實際的底層儲存中,是當作多條資料來儲存
- timestamp: 每一條資料都需要指定一個時間戳記,在 TSM 儲存引擎中會特殊對待,以為了最佳化後續的查詢操作。
Point
points相當於關聯式資料庫中的行,Point由時間戳記(time)、資料(field)、標籤(tags)組成。
Series
Series 相當於是 InfluxDB 中一些資料的集合,在同一個 database 中,retention policy、measurement、tag sets 完全相同的資料同屬於一個 series,同一個 series 的資料在物理上會按照時間順序排列儲存在一起。
Shard
Shard 在 InfluxDB 中是一個比較重要的概念,它和 retention policy 相關聯。每一個儲存策略下會存在許多 shard,每一個 shard 儲存一個指定時間段內的資料,並且不重複,例如 7點-8點 的資料落入 shard0 中,8點-9點的資料則落入 shard1 中。每一個 shard 都對應一個底層的 tsm 儲存引擎,有獨立的 cache、wal、tsm file。
目錄與檔案結構
InfluxDB 的資料存放區主要有三個目錄。預設情況下是 meta, wal 以及 data 三個目錄。meta 用於儲存資料庫的一些中繼資料,meta 目錄下有一個 meta.db 檔案。wal 目錄存放預寫記錄檔檔案,以 .wal 結尾。data 目錄存放實際儲存的資料檔案,以 .tsm 結尾。
InfluxDB基本操作
InfluxDB提供多種操作方式:
- 用戶端命令列方式
- HTTP API介面
- 各語言API庫
- 基於WEB管理頁面操作
用戶端命令列方式操作進入命令列
influxConnected to http://localhost:8086 version 1.2.4InfluxDB shell version: 1.2.4
顯示資料庫
show databases;
建立資料庫
create database cpu_info;
使用制定資料庫
use cpu_info;
刪除資料庫
drop database cpu_info;
在InfluxDB當中,並沒有表(table)這個概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能與傳統資料庫中的表一致,因此我們也可以將MEASUREMENTS稱為InfluxDB中的表
顯示所有表
show measurements
建立表
InfluxDB中沒有顯式的建立表的語句,只能通過insert資料的方式來建立新表。
insert disk_free,hostname=server01 value=442221834240i
其中 disk_free 就是表名,hostname是索引(tag),value=xx是記錄值(field),記錄值可以有多個,系統內建追加時間戳記。或者添加資料時,自己寫入時間戳記
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
刪除表
drop measurement disk_free
資料儲存策略(Retention Policies)
influxDB是沒有提供直接刪除資料記錄的方法,但是提供資料儲存策略,主要用於指定資料保留時間,超過指定時間,就刪除這部分資料。
查看當前資料庫Retention Policies
show retention policies on cpu_info;name duration shardGroupDuration replicaN default---- -------- ------------------ -------- -------autogen 0s 168h0m0s 1 true
建立新的Retention Policies
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
- rp_name:策略名;
- db_name:具體的資料庫名;
- 3w:儲存3周,3周之前的資料將被刪除,influxdb具有各種事件參數,比如:h(小時),d(天),w(星期);
- replication 1:副本個數,一般為1就可以了;
- default:設定為預設策略
修改Retention Policies
alter retention policy "rp_name" on "db_name" duration 30d default
刪除Retention Policies
drop retention policy "rp_name" on "db_name"
連續查詢(Continuous Queries)
InfluxDB的連續查詢是在資料庫中自動定時啟動的一組語句,語句中必須包含 SELECT 關鍵詞和 GROUP BY time() 關鍵詞。InfluxDB會將查詢結果放在指定的資料表中。
使用連續查詢是最優的降低採樣率的方式,連續查詢和儲存策略搭配使用將會大大降低InfluxDB的系統佔用量。而且使用連續查詢後,資料會存放到指定的資料表中,這樣就為以後統計不同精度的資料提供了方便。
建立連續查詢文法如下:
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>[RESAMPLE [EVERY <interval>] [FOR <interval>]]BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement>FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>]END
範例:
CREATE CONTINUOUS QUERY wj_30m ON shhnwangjian BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END
在shhnwangjian庫中建立了一個名為 wj_30m 的連續查詢,每三十分鐘取一個connected_clients欄位的平均值、中位值、最大值、最小值 redis_clients_30m 表中。使用的資料保留原則都是 default。
顯示所有已存在的連續查詢
SHOW CONTINUOUS QUERIES
刪除Continuous Queries
DROP CONTINUOUS QUERY <cq_name> ON <database_name>
InfluxDB概念和基本操作