在 InfluxDB 中,咱們能夠粗略的將要存入的一條數據看做一個虛擬的 key 和其對應的 value(field value)。格式以下:redis
cpu_usage,host=server01,region=hn-zhengzhou value=0.64 1434055562000000000
虛擬的 key 包括如下幾個部分: database, retention policy, measurement, tag sets, field name, timestamp。shell
points至關於關係數據庫中的行,Point由時間戳(time)、數據(field)、標籤(tags)組成。數據庫
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 的數據存儲主要有三個目錄。默認狀況下是 meta, wal 以及 data 三個目錄。meta 用於存儲數據庫的一些元數據,meta 目錄下有一個 meta.db 文件。wal 目錄存放預寫日誌文件,以 .wal 結尾。data 目錄存放實際存儲的數據文件,以 .tsm 結尾。日誌
InfluxDB提供多種操做方式:code
influx Connected to http://localhost:8086 version 1.2.4 InfluxDB shell version: 1.2.4
show databases;
create database cpu_info;
use cpu_info;
drop database cpu_info;
在InfluxDB當中,並無表(table)這個概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能與傳統數據庫中的表一致,所以咱們也能夠將MEASUREMENTS稱爲InfluxDB中的表server
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
influxDB是沒有提供直接刪除數據記錄的方法,可是提供數據保存策略,主要用於指定數據保留時間,超過指定時間,就刪除這部分數據。
show retention policies on cpu_info; name duration shardGroupDuration replicaN default ---- -------- ------------------ -------- ------- autogen 0s 168h0m0s 1 true
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
alter retention policy "rp_name" on "db_name" duration 30d default
drop retention policy "rp_name" on "db_name"
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
DROP CONTINUOUS QUERY <cq_name> ON <database_name>