InfluxDB 是用Go語言編寫的一個開源分佈式時序、事件和指標數據庫,無需外部依賴。redis
注:自帶管理界面在1.2版以後,將再也不提供。shell
oint屬性 傳統數據庫中的概念 time(時間戳) 每一個數據記錄時間,是數據庫中的主索引(會自動生成) fields(字段、數據) 各類記錄值(沒有索引的屬性)也就是記錄的值:溫度, 溼度 tags(標籤) 各類有索引的屬性:地區,海拔 注意數據庫
在influxdb中,字段必須存在。由於字段是沒有索引的。若是使用字段做爲查詢條件,會掃描符合查詢條件的全部字段值,性能不及tag。類比一下,fields至關於SQL的沒有索引的列。 tags是可選的,可是強烈建議你用上它,由於tag是有索引的,tags至關於SQL中的有索引的列。tag value只能是string類型。 series 至關因而 InfluxDB 中一些數據的集合,在同一個 database 中,retention policy、measurement、tag sets 徹底相同的數據同屬於一個 series,同一個 series 的數據在物理上會按照時間順序排列存儲在一塊兒。緩存
select * from students name: students time score stuid value服務器
1542848518465067760 89 s123 1542850528630385278 79 s123 1542850533581732431 69 s123 1542850536266169940 39 s123 1542850676477097687 99 s123 1542874869654197110 s124 100 1542874898710687064 s125 60dom
show series from students key分佈式
students,stuid=s123 students,stuid=s124 students,stuid=s125 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 shard shard 和 retention policy 相關聯。每個存儲策略下會存在許多 shard,每個 shard 存儲一個指定時間段內的數據,而且不重複; 例如 7點-8點 的數據落入 shard0 中,8點-9點的數據則落入 shard1 中。 每個 shard 都對應一個底層的 tsm 存儲引擎,有獨立的 cache、wal、tsm file。函數
組件 TSM 存儲引擎主要由幾個部分組成: cache、wal、tsm file、compactor。工具
Cache:cache 至關因而 LSM Tree 中的 memtabl。插入數據時,其實是同時往 cache 與 wal 中寫入數據,能夠認爲 cache 是 wal 文件中的數據在內存中的緩存。當 InfluxDB 啓動時,會遍歷全部的 wal 文件,從新構造 cache,這樣即便系統出現故障,也不會致使數據的丟失。 cache 中的數據並非無限增加的,有一個 maxSize 參數用於控制當 cache 中的數據佔用多少內存後就會將數據寫入 tsm 文件。若是不配置的話,默認上限爲 25MB,每當 cache 中的數據達到閥值後,會將當前的 cache 進行一次快照,以後清空當前 cache 中的內容,再建立一個新的 wal 文件用於寫入,剩下的 wal 文件最後會被刪除,快照中的數據會通過排序寫入一個新的 tsm 文件中。性能
WAL:wal 文件的內容與內存中的 cache 相同,其做用就是爲了持久化數據,當系統崩潰後能夠經過 wal 文件恢復尚未寫入到 tsm 文件中的數據。 TSM File:單個 tsm file 大小最大爲 2GB,用於存放數據。 Compactor:compactor 組件在後臺持續運行,每隔 1 秒會檢查一次是否有須要壓縮合並的數據。 主要進行兩種操做 一種是 cache 中的數據大小達到閥值後,進行快照,以後轉存到一個新的 tsm 文件中。 另一種就是合併當前的 tsm 文件,將多個小的 tsm 文件合併成一個,使每個文件儘可能達到單個文件的最大大小,減小文件的數量,而且一些數據的刪除操做也是在這個時候完成。
安裝 環境: CentOS7.0_x64 InfluxDB版本:1.7.0
基礎環境 yum install go 1 InfluxDB的安裝 wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm rpm -ivh influxdb-1.2.0.x86_64.rpm 1 2 安裝後產生的InfluxDB相關文件講解 /usr/bin下文件 文件名 文件解析 influxd influxdb服務器 influx influxdb命令行客戶端 influx_inspect 查看工具 influx_stress 壓力測試工具 influx_tsm 數據庫轉換工具(將數據庫從b1或bz1格式轉換爲tsm1格式) /var/lib/influxdb下文件夾 文件夾 文件夾解析 data 存放最終存儲的數據,文件以**.tsm**結尾 meta 存放數據庫元數據 wal 存放預寫日誌文件 /etc/influxdb下文件 文件 文件解析 influxdb.conf influxdb數據庫配置文件 配置文件參數詳解:InfluxDB influxdbc.conf配置文件詳解
啓動服務 操做服務的相關命令 服務式啓動命令
service influxdb start 1 服務式的其餘命令 中止服務 service influxdb stop 1 重啓服務 service influxdb restart 1 嘗試重啓服務 service influxdb try-restart 1 從新加載服務 service influxdb reload 1 強制從新加載服務 service influxdb force-reload 1 查看服務狀態 service influxdb status 1 以非服務方式啓動
cd /usr/bin ./influxd 1 2 服務啓動查看是否正常 經過查看服務對應進程
[root@localhost influxdb]# ps aux | grep influx influxdb 7293 0.3 2.4 635640 46516 ? Ssl 18:43 0:01 /usr/bin/influxd -config /etc/influxdb/influxdb.conf root 7412 0.0 0.0 112656 964 pts/0 S+ 18:49 0:00 grep --color=auto influx 1 2 3 經過service influxdb status命令,查看服務狀態
[root@localhost influxdb]# service influxdb status Redirecting to /bin/systemctl status influxdb.service ● influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2018-11-21 18:43:06 PST; 1h 1min ago Docs: https://docs.influxdata.com/influxdb/ Main PID: 7293 (influxd) CGroup: /system.slice/influxdb.service └─7293 /usr/bin/influxd -config /etc/influxdb/influxdb.conf
Nov 21 19:32:48 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:32:48 -0800] "POST /query?chunked=true&db=&epoch=ns&q=usr+testdn HTTP/1.1" 400 148 "-" "InfluxDBS...29d6319a 172 Nov 21 19:32:50 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:32:50 -0800] "POST /query?chunked=true&db=&epoch=ns&q=usr+testdb HTTP/1.1" 400 148 "-" "InfluxDBS...29d6319a 119 Nov 21 19:33:00 localhost.localdomain influxd[7293]: ts=2018-11-22T03:33:00.628996Z lvl=info msg="Executing query" log_id=0BvKdN2W000 service=query query="SHOW DATABASES" Nov 21 19:33:00 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:33:00 -0800] "POST /query?db=&epoch=ns&q=SHOW+DATABASES HTTP/1.1" 200 116 "-" "InfluxDBShell/1.7....29d6319a 608 Nov 21 19:33:10 localhost.localdomain influxd[7293]: ts=2018-11-22T03:33:10.917329Z lvl=info msg="Executing query" log_id=0BvKdN2W000 service=query query="SHOW MEASUREMENTS ON testdb" Nov 21 19:33:10 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:33:10 -0800] "POST /query?chunked=true&db=testdb&epoch=ns&q=show+measurements HTTP/1.1" 200 108 "...29d6319a 939 Nov 21 19:43:07 localhost.localdomain influxd[7293]: ts=2018-11-22T03:43:07.447858Z lvl=info msg="Retention policy deletion check (start)" log_id=0BvKdN2W000 service=retention trace_..._event=start Nov 21 19:43:07 localhost.localdomain influxd[7293]: ts=2018-11-22T03:43:07.448965Z lvl=info msg="Retention policy deletion check (end)" log_id=0BvKdN2W000 service=retention trace_id...psed=1.161ms Nov 21 19:43:49 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:43:49 -0800] "POST /query?chunked=true&db=testdb&epoch=ns&q=qiut HTTP/1.1" 400 149 "-" "InfluxDBS...29d6319a 189 Nov 21 19:43:58 localhost.localdomain influxd[7293]: [httpd] ::1 - - [21/Nov/2018:19:43:58 -0800] "POST /query?chunked=true&db=testdb&epoch=ns&q=quir HTTP/1.1" 400 149 "-" "InfluxDBS...c29d6319a 95 Hint: Some lines were ellipsized, use -l to show in full. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 服務啓動後相關端口 8086:HTTP API的端口 8088:備份恢復時使用,默認值爲8088 InfluxDB 客戶端命令行方式操做 InfluxDB數據庫操做
客戶端命令行方式操做
[root@localhost influxdb]# influx Connected to http://localhost:8086 version 1.7.0 InfluxDB shell version: 1.7.0 Enter an InfluxQL query
1 2 3 4 5 顯示數據庫
show databases name: databases name
_internal 1 2 3 4 5 新建數據庫
create database testdb show databases name: databases name
_internal testdb 1 2 3 4 5 6 7 刪除數據庫
drop database testdb show databases name: databases name
_internal 1 2 3 4 5 6 使用數據庫
create database testdb use testdb Using database testdb 1 2 3 InfluxDB 數據表操做 在InfluxDB當中,並無表(table)這個概念,取而代之的是measurement,measurement的功能與傳統數據庫中的表一致,所以咱們也能夠將measurement稱爲InfluxDB中的表。
顯示全部表
show measurement 1 新建表 InfluxDB中沒有顯示的建立表的語句,只能經過insert數據的房仍是來創建新表。 其中 disk_free 就是表名,hostname 是索引(tag),value=xx 是記錄值(field),記錄值能夠有多個,系統自帶追加時間戳。
insert disk_free,hostname=server01 value=442221834240i select * from disk_free name: disk_free time hostname value
1435362189575692180 server01 442221834240 1 2 3 4 5 6 或者添加數據時,本身寫入時間戳(寫入相同時間戳、相同tags,對原有數據進行update操做)
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182 select * from disk_free name: disk_free time hostname value
1435362189575692180 server01 442221834240 1435362189575692182 server01 442221834240 1 2 3 4 5 6 7 刪除表
drop measurement disk_free 1 數據保存策略(Retention Policies) InfluxDB 是沒有提供直接刪除數據記錄的方法,可是提供數據保存策略,主要用於指定數據保留時間,超過指定時間,就刪除這部分數據。
查看當前數據庫Retention Policies
name:名稱,此示例名稱爲 default。 duration:持續時間,0表明無限制。 shardGroupDuration:shardGroup的存儲時間,shardGroup是InfluxDB的一個基本儲存結構,應該大於這個時間的數據在查詢效率上應該有所下降。 replicaN:全稱是replication,副本個數。 default:是不是默認策略。
show retention policies on testdb name duration shardGroupDuration replicaN default
autogen 0s 168h0m0s 1 true 1 2 3 4 建立新的Retention Policies
rp_name:策略名。 db_name:具體的數據庫名。 3w:保存3周,3周以前的數據將被刪除,influxdb 具有各類事件參數,持續時間必須至少爲1小時;好比:h(小時)、d(天)、w(星期)。 replication 1:副本個數,通常爲1便可。 default:設置爲默認策略。 create retention policy "rp_name" on "db_name" duration 3w replication 1 default 1 修改Retention Policies
alter retention policy "rp_name" on "db_name" duration 30d default 1 刪除Retention Policies
drop retention policy "rp_name" on "db_name" 1 連續查詢(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 1 2 3 4 5 樣例 CREATE CONTINUOUS QUERY wj_30m ON testdb 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 1 在 testdb 庫中新建了一個名爲 wj_30m 的連續查詢,每三十分鐘取一個 connected_clients 字段的平均值、中位值、最大值、最小值 redis_clients_30m 表中。使用的數據保留策略都是default。 不一樣 database 樣例: CREATE CONTINUOUS QUERY wj_30m ON testdb_30 BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO testdb_30.autogen.redis_clients_30m FROM testdb.autogen.redis_clients GROUP BY ip,port,time(30m) END 1 顯示全部已存在的連續查詢
show continuous queries 1 刪除Continuous Queries