認識Influxdb時序數據庫及Influxdb基礎命令操作

認識Influxdb時序數據庫及Influxdb基礎命令操作

一、什麼是Influxdb,什麼又是時序數據庫

  • Influxdb是一個用於存儲時間序列,事件和指標的開源數據庫,由Go語言編寫而成,無需外部依賴。
  • 什麼是時間序列數據庫?就是基於時間存儲的數據,數據格式裏包含Timestamp字段的數據,即每一條數據中都會有一個時間存儲字段。

二、Influxdb能用來做什麼

  Influxdb(時序數據庫)主要的應用場景有以下幾種:

  1. 很多物聯網數據都通過InfluxDB存儲,分析與展示。如:智慧物聯網監控分析系統,傳統石油化工、採礦以及製造企業設備數據採集與分析,醫療數據採集與分析,車聯網,智慧交通等。
  2. InfluxDB同時還應用於日誌存儲、監控數據統計和分析。如:各種服務、軟件以及系統監控數據採集、分析與報警,金融數據採集與分析等。記錄每毫秒服務器以及軟件服務的使用情況,用於後期大數據分析,機器學習,實現預測、預警、服務提升優化等。
  3. 實時大數據量的存儲以及快速查詢,定時歸集指定時間的數據,用於更大時間範圍監控數據的展現。

  Influxdb的特性:

  1. 時間序列數據編寫的自定義高性能數據存儲。TSM引擎允許高攝取速度和數據壓縮。
  2. 內置HTTP接口,使用方便,簡單,高性能的寫入和查詢HTTP API
  3. 數據可以打標記,標籤允許對系列進行索引以實現快速有效的查詢
  4. 類SQL的查詢語句,可輕鬆查詢聚合數據
  5. 安裝管理很簡單,並且讀寫數據很高效
  6. 能夠實時查詢,數據在寫入時被索引後就能夠被立即查出
  7. 完全用 Go 語言編寫。 它編譯成單個二進制文件,沒有外部依賴項

三、Influxdb與Mysql的基本概念對比

 

概念 InfluxDB MySQL
數據庫(同)  database  database
 表(不同)  table measurement 
 列(不同 )  column tag (帶索引的,非必須)、field(不帶索引)、timestemp(唯一主鍵)

 

四、Influxdb有哪些組成結構 

  • 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。
  • field name: 例如上面數據中的 value 就是 fieldName,InfluxDB 中支持一條數據中插入多個 fieldName,這其實是一個語法上的優化,在實際的底層存儲中,是當作多條數據來存儲。
  • timestamp: 每一條數據都需要指定一個時間戳,在 TSM 存儲引擎中會特殊對待,以爲了優化後續的查詢操作。

說明:

  1. Point:Point由時間戳(time)、數據(field)、標籤(tags)組成。相當於傳統數據庫裏的一行數據;
  2. tag set:不同的每組tag key和tag value的集合;
  3. field set:每組field key和field value的集合,列不需要手動創建,加入數據會自動創建;
  4. Series 相當於是 InfluxDB 中一些數據的集合,在同一個 database 中,retention policy、measurement、tag sets 完全相同的數據同屬於一個 series,同一個 series 的數據在物理上會按照時間順序排列存儲在一起;
  5. Shard 在 InfluxDB 中是一個比較重要的概念,它和 retention policy 相關聯。每一個存儲策略下會存在許多 shard,每一個 shard 存儲一個指定時間段內的數據,並且不重複,例如 7點-8點 的數據落入 shard0 中,8點-9點的數據則落入 shard1 中。每一個 shard 都對應一個底層的 tsm 存儲引擎,有獨立的 cache、wal、tsm file;

五、怎麼快速搭建Influxdb環境,入門Influxdb

  • 這裏使用docker搭建快速入門,命令如下:
docker run -d -p 8086:8086 --name myinfluxdb influxdb
  • 也可以使用docker-compose.yml,便於後期管理,與其他容器結合使用:
version: '3'
    services:
      influxdb:
        image: influxdb
        restart: always
        tty: true
        container_name: influxdb
        ports:
          - 8086:8086

六、常用基礎操作 

  1. 進入上述創建的myinfluxdb容器,docker exec -it myinfluxdb bash
  2. 輸入influx,即進入Influxdb交互式界面:

root@0aba3a348938:/# influx

Connected to http://localhost:8086 version 1.8.0

InfluxDB shell version: 1.8.0

> 

  3.  常用命令及效果如下:

-- 進入數據庫
use nginx_log;
-- 刪除數據庫
drop database nginx_log;
-- 顯示數據庫中所有表
SHOW MEASUREMENTS;
-- 創建表,直接在插入數據的時候指定表名,自動創建表及列
insert test,host=127.0.0.1,monitor_name=test count=1
-- 查詢10條數據
select * from test limit 10;
-- 查看一個measurement中所有的tag key 
show tag keys
-- 查看一個measurement中所有的field key 
show field keys
-- 查看一個measurement中所有的保存策略(可以有多個,一個標識爲default)
show retention policies;
-- 創建存儲策略
create retention policy "rp_name" on "nginx_log" duration 3w replication 1 default
rp_name:策略名;
db_name:具體的數據庫名;
3w:保存3周,3周之前的數據將被刪除,influxdb具有各種事件參數,比如:h(小時),d(天),w(星期);
replication 1:副本個數,一般爲1就可以了;
default:設置爲默認策略
-- 修改存儲策略
alter retention policy "rp_name" on "nginx_log" duration 30d default
-- 刪除存儲策略
drop retention policy "rp_name" on "nginx_log"
-- 刪除表
drop measurement test

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章