InfluxDB基本概念和操做

 

InfluxDB基本概念和操做

 

InfluxDB基本概念

一、數據格式html

在 InfluxDB 中,咱們能夠粗略的將要存入的一條數據看做一個虛擬的 key 和其對應的 value(field value)。格式以下:python

cpu_usage,host=server01,region=us-west value=0.64 1434055562000000000

虛擬的 key 包括如下幾個部分: database, retention policy, measurement, tag sets, field name, timestamp。linux

  • 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。
  • tag--標籤,在InfluxDB中,tag是一個很是重要的部分,表名+tag一塊兒做爲數據庫的索引,是「key-value」的形式。
  • field name: 例如上面數據中的 value 就是 fieldName,InfluxDB 中支持一條數據中插入多個 fieldName,這實際上是一個語法上的優化,在實際的底層存儲中,是看成多條數據來存儲。
  • timestamp: 每一條數據都須要指定一個時間戳,在 TSM 存儲引擎中會特殊對待,覺得了優化後續的查詢操做。

二、與傳統數據庫中的名詞作比較redis

influxDB中的名詞 傳統數據庫中的概念
database 數據庫
measurement 數據庫中的表
points 表裏面的一行數據

三、Point數據庫

Point由時間戳(time)、數據(field)、標籤(tags)組成。緩存

Point至關於傳統數據庫裏的一行數據,以下表所示:post

 

Point屬性 傳統數據庫中的概念
time 每一個數據記錄時間,是數據庫中的主索引(會自動生成)
fields 各類記錄值(沒有索引的屬性)
tags 各類有索引的屬性

四、Series優化

       Series 至關因而 InfluxDB 中一些數據的集合,在同一個 database 中,retention policy、measurement、tag sets 徹底相同的數據同屬於一個 series,同一個 series 的數據在物理上會按照時間順序排列存儲在一塊兒。url

五、Shardspa

       Shard 在 InfluxDB 中是一個比較重要的概念,它和 retention policy 相關聯。每個存儲策略下會存在許多 shard,每個 shard 存儲一個指定時間段內的數據,而且不重複,例如 7點-8點 的數據落入 shard0 中,8點-9點的數據則落入 shard1 中。每個 shard 都對應一個底層的 tsm 存儲引擎,有獨立的 cache、wal、tsm file。

六、組件

TSM 存儲引擎主要由幾個部分組成: cache、wal、tsm file、compactor。

1)Cache:cache 至關因而 LSM Tree 中的 memtabl。插入數據時,其實是同時往 cache 與 wal 中寫入數據,能夠認爲 cache 是 wal 文件中的數據在內存中的緩存。當 InfluxDB 啓動時,會遍歷全部的 wal 文件,從新構造 cache,這樣即便系統出現故障,也不會致使數據的丟失。

cache 中的數據並非無限增加的,有一個 maxSize 參數用於控制當 cache 中的數據佔用多少內存後就會將數據寫入 tsm 文件。若是不配置的話,默認上限爲 25MB,每當 cache 中的數據達到閥值後,會將當前的 cache 進行一次快照,以後清空當前 cache 中的內容,再建立一個新的 wal 文件用於寫入,剩下的 wal 文件最後會被刪除,快照中的數據會通過排序寫入一個新的 tsm 文件中。

2)WAL:wal 文件的內容與內存中的 cache 相同,其做用就是爲了持久化數據,當系統崩潰後能夠經過 wal 文件恢復尚未寫入到 tsm 文件中的數據。

3)TSM File:單個 tsm file 大小最大爲 2GB,用於存放數據。

4)Compactor:compactor 組件在後臺持續運行,每隔 1 秒會檢查一次是否有須要壓縮合並的數據。

主要進行兩種操做,一種是 cache 中的數據大小達到閥值後,進行快照,以後轉存到一個新的 tsm 文件中。

另一種就是合併當前的 tsm 文件,將多個小的 tsm 文件合併成一個,使每個文件儘可能達到單個文件的最大大小,減小文件的數量,而且一些數據的刪除操做也是在這個時候完成。

七、目錄與文件結構

InfluxDB 的數據存儲主要有三個目錄。默認狀況下是 meta, wal 以及 data 三個目錄。

meta 用於存儲數據庫的一些元數據,meta 目錄下有一個 meta.db 文件。

wal 目錄存放預寫日誌文件,以 .wal 結尾。

data 目錄存放實際存儲的數據文件,以 .tsm 結尾。

上面幾張圖中,_internal爲數據庫名,monitor爲存儲策略名稱,再下一層目錄中的以數字命名的目錄是 shard 的 ID 值。

存儲策略下有兩個 shard,ID 分別爲 1 和 2,shard 存儲了某一個時間段範圍內的數據。再下一級的目錄則爲具體的文件,分別是 .wal 和 .tsm 結尾的文件。

 

InfluxDB基本操做

InfluxDB提供多種操做方式:

1)客戶端命令行方式

2)HTTP API接口

3)各語言API庫

4)基於WEB管理頁面操做

 

客戶端命令行方式操做

進入命令行

influx -precision rfc3339

 

一、InfluxDB數據庫操做

  • 顯示數據庫
show databases

  • 新建數據庫
create database shhnwangjian

  • 刪除數據庫
drop database shhnwangjian

  • 使用指定數據庫
use shhnwangjian

 

二、InfluxDB數據表操做

在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 "db_name"

  • 建立新的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。

不一樣database樣例:

CREATE CONTINUOUS QUERY wj_30m ON shhnwangjian_30 BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO shhnwangjian_30.autogen.redis_clients_30m FROM shhnwangjian.autogen.redis_clients GROUP BY ip,port,time(30m) END

 

  • 顯示全部已存在的連續查詢
SHOW CONTINUOUS QUERIES

  • 刪除Continuous Queries
DROP CONTINUOUS QUERY <cq_name> ON <database_name>

 

參考文章:

http://blog.fatedier.com/2016/08/05/detailed-in-influxdb-tsm-storage-engine-one/

http://www.linuxdaxue.com/noun-interpretation-of-influxdb.html

相關文章
相關標籤/搜索