InfluxDB基本概念和操作

來源:互聯網
上載者:User

標籤:到期   redis   monitor   file   最大值   檔案恢複   server   標籤   丟失   

InfluxDB基本概念

1、資料格式

在 InfluxDB 中,我們可以粗略的將要存入的一條資料看作一個虛擬 key 和其對應的 value(field value)。格式如下:

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

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

  • 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 儲存引擎中會特殊對待,以為了最佳化後續的查詢操作。

2、與傳統資料庫中的名詞做比較

influxDB中的名詞 傳統資料庫中的概念
database 資料庫
measurement 資料庫中的表
points 表裡面的一行資料

3、Point

Point由時間戳記(time)、資料(field)、標籤(tags)組成。

Point相當於傳統資料庫裡的一行資料,如下表所示:

 

Point屬性 傳統資料庫中的概念
time 每個資料記錄時間,是資料庫中的主索引(會自動產生)
fields 各種記錄值(沒有索引的屬性)
tags 各種有索引的屬性

4、Series

       Series 相當於是 InfluxDB 中一些資料的集合,在同一個 database 中,retention policy、measurement、tag sets 完全相同的資料同屬於一個 series,同一個 series 的資料在物理上會按照時間順序排列儲存在一起。

5、Shard

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

6、組件

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 檔案合并成一個,使每一個檔案盡量達到單個檔案的最大大小,減少檔案的數量,並且一些資料的刪除操作也是在這個時候完成。

7、目錄與檔案結構

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管理頁面操作

 

用戶端命令列方式操作

進入命令列

1 influx -precision rfc3339

 

1、InfluxDB資料庫操作

  • 顯示資料庫
1 show databases

  • 建立資料庫
1 create database shhnwangjian

  • 刪除資料庫
1 drop database shhnwangjian

  • 使用指定資料庫
1 use shhnwangjian

 

2、InfluxDB資料表操作

在InfluxDB當中,並沒有表(table)這個概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能與傳統資料庫中的表一致,因此我們也可以將MEASUREMENTS稱為InfluxDB中的表。

  • 顯示所有表
1 SHOW MEASUREMENTS
  • 建立表

InfluxDB中沒有顯式的建立表的語句,只能通過insert資料的方式來建立新表。

1 insert disk_free,hostname=server01 value=442221834240i

其中 disk_free 就是表名,hostname是索引(tag),value=xx是記錄值(field),記錄值可以有多個,系統內建追加時間戳記

 

或者添加資料時,自己寫入時間戳記

1 insert disk_free,hostname=server01 value=442221834240i 1435362189575692182

  • 刪除表
1 drop measurement disk_free

 

3、資料儲存策略(Retention Policies)

influxDB是沒有提供直接刪除資料記錄的方法,但是提供資料儲存策略,主要用於指定資料保留時間,超過指定時間,就刪除這部分資料。

  • 查看當前資料庫Retention Policies
1 show retention policies on "db_name"

  • 建立新的Retention Policies
1 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
1 alter retention policy "rp_name" on "db_name" duration 30d default
  • 刪除Retention Policies
1 drop retention policy "rp_name" on "db_name"

 

4、連續查詢(Continuous Queries)

InfluxDB的連續查詢是在資料庫中自動定時啟動的一組語句,語句中必須包含 SELECT 關鍵詞和 GROUP BY time() 關鍵詞。

InfluxDB會將查詢結果放在指定的資料表中。

目的:使用連續查詢是最優的降低採樣率的方式,連續查詢和儲存策略搭配使用將會大大降低InfluxDB的系統佔用量。而且使用連續查詢後,資料會存放到指定的資料表中,這樣就為以後統計不同精度的資料提供了方便。

  • 建立連續查詢
12345 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 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範例:

1 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

 

  • 顯示所有已存在的連續查詢
1 SHOW CONTINUOUS QUERIES

  • 刪除Continuous Queries
1 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

InfluxDB基本概念和操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.