influxdb是乙個開源的時序資料庫,使用go語言開發,特別適合用於處理和分析資源監控資料這種時序相關資料。而influxdb自帶的各種特殊函式如求標準差,隨機取樣資料,統計資料變化比等,使資料統計和實時分析變得十分方便。influxdb的單機版是開源的,而集群版是商業版,influxdb被設計執行在ssd上,如果使用機器或者網路磁碟作為儲存介質,會導致效能下降至少乙個數量級。influxdb支援restful api,同時也支援https,為了保證安全性,非區域網建議使用https與influxdb進行通訊。
學習influxdb,如同學習mysql先要了解sql一樣,讓我們一起來看看influxdb的那些命令們 ~centos下使用命令 yum install influxdb 安裝influxdb之後,就可以使用命令 service influxdb start 啟動influxdb,通過命令 influx 啟動cli客戶端。influxdb的命令基本都符合標準的sql格式,基礎操作命令如下:
influx 啟動influxdb客戶端,如同mysql -u ***功能
create database db1 建立資料庫db1
show databases 檢視資料庫列表
use db1 使用資料庫db1,是不是和mysql中功能類似
show measurements 檢視measurement列表
drop database db1 刪除資料庫db1
drop measurement mt1 刪除表mt1
delete from measurement [where ]
drop shard 刪除分片
influxdb資料寫入需滿足如下格式:
insert [,=...] =[,=...] [unix-nano-timestamp]
注意:measurement和至少乙個fileld的k-v是必須的,tag和timestrap時間戳是可選的。說實話,這個寫入格式還是有點小嚴格的,因為它要求measurement和可能的0個或多個tag之間必須是緊挨著的,中間不能有空格;同時多個filed之間也是不能有空格,tag和field的k,tag的v都是字串型別;時間戳不是必須的,如果為空則使用服務端的本地時間作為時間戳。相同時間戳的資料第二次寫入會覆蓋第一次寫入的資料,相當於更新操作。
資料寫入完成之後,就可以使用檢視命令:
select * from measurement_name [where ] [limit xx] 檢視資料
show series [on dbname] [from measurement] [where ] [limit xx] 檢視series資訊
show tag keys [on dbname] [from measurement] [where ] [limit xx] 檢視tag keys資訊
show field keys [on dbname] [from measurement] 檢視field keys
influxdb可支援每秒十萬級別的資料量,如果長時間儲存會對儲存造成很大壓力,因此和一般資料儲存系統一樣有乙個資料保留策略,同時針對大流量量資料可取樣儲存,小流量資料可全量儲存。influxdb通過保留策略(rp,retention policy
)來管理過期資料。
# 建立過期策略
create retention policy on duration replicationn [shard duration ] [default]
show retention policies [on dbname] 檢視過期策略
在influxdb中,通過資料保留策略(rp),分片是掛在rp下管理的,資料過期的維度是分片,當檢測到乙個 shard 中的資料過期後,只需要將這個 shard 的資源釋放,相關檔案刪除即可,這樣的做法使得刪除過期資料變得非常高效。
除了直接使用influxdb命令之外,還可使用函式,influxdb的函式大致分為aggregate,select和predict
。aggregate型別命令大致如下:
selectors型別命令大致如下:
influxdb支援很多常見和高階的聚合查詢函式,可滿足大多數場景需要,具體可參考
infludb中儲存的是時間序列資料,比如說某個時間點系統負載、服務耗時等資訊,時間序列資料可以包含多個值。關於什麼是時間序列資料,簡單來來說就是資料是和乙個時間點關聯的,結合mysql中的記錄與id關係來看就是時間序列資料的主鍵就是時間點(timestrap
)。
infludb中的一條資料至少包括measurement
(對應mysql中表概念)、timestamp
、至少乙個k-v結構的field
,再加上0個或者多個k-v結構的tag。對比mysql來看,measurement就是一張表,其主鍵是timestamp時間戳,tag和field對應就是表中列,tag和field都是k-v介面,k對應列的名字,v對應該列儲存的值,tag和field不同的是,tag是有索引的而field沒有(如果查詢條件為tag則會掃瞄所有查詢到的資料),對於mysql表的有索引列和無索引列。注意mysql中的表需要提前定義結構,而influxdb中的measurement無需提前定義,其null值也不會被儲存。
influxdb中measurement無需定義,即無模式設計,開發者可以在任意新增measurement,tags和fields,不過針對同乙個field,第二次和第一次寫入的資料型別不匹配,influxdb會報錯(由於預設tag的v都是字串型別,所有不存在這個問題,不管輸入是什麼資料都當做字串來處理)。
推薦閱讀
InfluxDB 常用命令
查表 插入資料 insert cpu,host servera,region us west value 0.64 insert cpu,tagid a001,host servera,region us west valuef 0.64,valuei 5,valueb false,values a...
influxdb命令列操作
輸入命令 influxd.exe config influxdb.conf則開啟了influxd,出現下圖 該顯示框不可關閉。輸入命令 influx.exe顯示如下,則開啟成功 相關博文 influx inspect export datadir c users administrator infl...
InfluxDB的索引儲存
tsi 預設配置下索引資訊存放於記憶體中,index version tsi1 配置作用是將索引資訊持久化至硬碟,tsi索引主要包含logfile檔案 tsl結尾 tsi檔案,其實上篇提到的series 檔案也算。tsl tsi檔案位於在每個shard中index目錄下。index file 當ts...