?InfluxDB是什么
InfluxDB 是一個由 InfluxData 開發(fā)的開源時序型數(shù)據(jù)庫。它由 Go 寫成,著力于高性能地查詢與存儲時序型數(shù)據(jù)。InfluxDB 被廣泛應(yīng)用于存儲系統(tǒng)的監(jiān)控數(shù)據(jù),IoT 行業(yè)的實時數(shù)據(jù)等場景。技術(shù)特點包括:
- InfluxDB在技術(shù)實現(xiàn)上充分利用了Go語言的特性,無需任何外部依賴即可獨立部署[5]。
- InfluxDB提供了一個類似于SQL的查詢語言并且一系列內(nèi)置函數(shù)方便用戶進行數(shù)據(jù)查詢。
- InfluxDB存儲的數(shù)據(jù)從邏輯上由 Measurement, tag組以及field 組以及一個時間戳組成的:
Measurement:由一個字符串表示該條記錄對應(yīng)的含義。比如它可以是監(jiān)控數(shù)據(jù)cpu_load?,也可以是測量數(shù)據(jù)average_temperature
tag組:由一組鍵值對組成,表示的是該條記錄的一系列屬性信息。同樣的 measurement 數(shù)據(jù)所擁有的 tag 組不一定相同,它是無模式的(Schema-free)。tag 信息是默認被索引的。
field組:也是由一組鍵值對組成,表示的是該條記錄具體的value信息(有名稱)。field組中可定義的value類型包括:64位整型,64位浮點型,字符串以及布爾型。Field信息是無法被索引的。
時間戳:就是該條記錄的時間屬性。如果插入數(shù)據(jù)時沒有明確指定時間戳,則默認存儲在數(shù)據(jù)庫中的時間戳則為該條記錄的入庫時間。
InfluxDB 支持基于 HTTP 的數(shù)據(jù)插入與查詢。同時也接受直接基于TCP或UDP協(xié)議的連接。
InfluxDB 允許用戶定義數(shù)據(jù)保存策略(Retention Policies)來實現(xiàn)對存儲超過指定時間的數(shù)據(jù)進行刪除或者降采樣。
增刪改查操作
進入influxDB命令行
influx -precision rfc3339
InfluxDB數(shù)據(jù)庫操作
- 顯示數(shù)據(jù)庫
show databases
- 新建數(shù)據(jù)庫
create database shhnwangjian
- 刪除數(shù)據(jù)庫
drop database shhnwangjian
- 使用指定數(shù)據(jù)庫
use shhnwangjian
InfluxDB數(shù)據(jù)表操作
在 InfluxDB 當中,并沒有表(table)這個概念,取而代之的是 MEASUREMENTS,MEASUREMENTS 的功能與傳統(tǒng)數(shù)據(jù)庫中的表一致,因此我們也可以將 MEASUREMENTS 稱為 InfluxDB 中的表。
??顯示所有表
SHOW MEASUREMENTS
??新建表
InfluxDB中沒有顯式的新建表的語句,只能通過insert數(shù)據(jù)的方式來建立新表。
insert disk_free,hostname=server01 value=442221834240i insert cpu_virtual_used_num,host=1 value=41556593150
其中?disk_free??就是表名,hostname?是索引(tag),value=xx是記錄值(field),記錄值可以有多個,系統(tǒng)自帶追加時間戳
或者添加數(shù)據(jù)時,自己寫入時間戳
insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
??刪除表
drop measurement disk_free
數(shù)據(jù)保存策略(Retention Policies)
influxDB是沒有提供直接刪除數(shù)據(jù)記錄的方法,但是提供數(shù)據(jù)保存策略,主要用于指定數(shù)據(jù)保留時間,超過指定時間,就刪除這部分數(shù)據(jù)。
- 查看當前數(shù)據(jù)庫 Retention Policies
show retention policies on "db_name" show retention policies on cdhnm
- 創(chuàng)建新的 Retention Policies
create retention policy "rp_name" on "db_name" duration 3w replication 1 default create retention policy test on cdhnm duration 1h replication 1 default
rp_name:策略名;
db_name:具體的數(shù)據(jù)庫名;
3w:保存3周,3周之前的數(shù)據(jù)將被刪除,influxdb具有各種事件參數(shù),比如:h(小時),d(天),w(星期);replication 1:副本個數(shù),一般為1就可以了;
default:設(shè)置為默認策略
- 修改 Retention Policies
alter retention policy “rp_name” on “db_name” duration 30d default alter retention policy autogen on cdhnm duration 1h default
- 修改數(shù)據(jù)策略
alter retention policy autogen on cdhnm duration 0h replication 1 default
- 刪除 Retention Policies
drop retention policy “rp_name” on “db_name" drop retention policy test on cdhnm
查詢數(shù)據(jù)
select * fromcpu_virtual_used_num
插入數(shù)據(jù)
插入數(shù)據(jù)同時創(chuàng)建表
insert disk_free,hostname=server01 value=442221834240i insert cpu_virtual_used_num,host=470b14f0-e869-43ed-a8e6-fd634258271f,hostname=server01 value=0.3 1557023160
刪除數(shù)據(jù)
influxDB是沒有提供直接刪除數(shù)據(jù)記錄的方法,但是提供數(shù)據(jù)保存策略,主要用于指定數(shù)據(jù)保留時間,超過指定時間,就刪除這部分數(shù)據(jù)。創(chuàng)建新的 數(shù)據(jù)庫過期策略至少一個小時
Retention Policies create retention policy "rp_name" on "db_name" duration 3w replication 1 default retention policy duration must be at least 1h0m0s influxdb
查詢表字段
查詢tag:show tag keys from cluster_metric
查詢field:show field keys from cluster_metric
時區(qū)問題
在使用 InfluxDB 時,發(fā)現(xiàn)由于 InfluxDB 使用的是 UTC 時間,在查詢時經(jīng)常會遇到時區(qū)的問題
1、時間格式
InfluxDB 除了支?epoch_time?外,還支持rfc3339_date_time_string和rfc3339_like_date_time_string。
epoch_time
理論一些的解釋是從協(xié)調(diào)世界時(Thursday, 1 January 1970)開始至今過去的時間。比如我們在 java 程序中使用System.currentTimeMillis()得到的就是這個時間。一般情況下為毫秒級(ms)精度,即13位Long類型。而在InfluxDB中,時間戳的精度可以達到納秒級(ns)即19位Long類型。
rfc3339_date_time_string
rfc3339時間格式是ietf協(xié)會定義的一種時間格式,這個名字是因為它被定義在rfc3339中。感興趣的同學(xué)可以自己查看上面的連接。InfluxDB中rfc3339的時間格式是這樣的:
‘YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ’
其中nnnnnnnnn是可選的,如果不寫則會被設(shè)置為000000000。注意,如果使用這種時間格式,需要使用單括號(’)將時間括起來。
rfc3339_like_date_time_string
因為rfc3339_date_time_string的格式確實比較反人類,所以InfluxDB也支持這種人類閱讀更友好的格式:
‘YYYY-MM-DD HH:MM:SS.nnnnnnnnn’
其中HH:MM:SS.nnnnnnnnn是可選的,如果不填寫會被設(shè)置為00:00:00.000000000。所以查詢時可以設(shè)置到天、小時、分鐘、秒等不同精度。這種時間格式同樣要求被單括號括起來。
2、調(diào)整時間戳精度
InfluxDB默認東時間是納秒(ns),即19位時間戳。但是一般情況下時間精度不會這么高。所以如果使用秒級精度查詢:
select * from cpu_virtual_used_num where time >= 1435333209s and time <p>如果使用毫秒級精度查詢:</p><pre class="brush:sql;toolbar:false;">select * from cpu_virtual_used_num where time >= 1435333209000ms and time <h3>3、調(diào)整時區(qū)</h3><p>如果需要使用北京時間(東八區(qū)),可以在SQL中使用tc關(guān)鍵字:</p><pre class="brush:sql;toolbar:false;">select * from cpu_virtual_used_num where time >= '2018-11-23 14:30:39' and time <h3>4、UTC時間與Beijing時間轉(zhuǎn)換</h3><p>timestamp時間列</p><p>既然是時間序列數(shù)據(jù)庫,influxdb 的數(shù)據(jù)都有一列名為 time 的列,里面存儲 UTC 時間戳。</p><p>Influxdb 時間轉(zhuǎn)成北京時間:UTC time + 8 hours = Beijing time</p><h2>sql語句</h2><pre class="brush:sql;toolbar:false;">influx -precision rfc3339 show retention policies on cdhnm alter retention policy autogen on cdhnm duration 1h default create retention policy test on cdhnm duration 1h replication 1 default drop retention policy test on cdhnm insert cpu_virtual_used_num,host=470b14f0-e869-43ed-a8e6-fd634258271f,hostname=server01 value=0.9 1557045292000000000 select * from cpu_virtual_used_num where time >= '2018-11-23 14:30:39' and time <h2>啟動服務(wù)</h2><pre class="brush:sql;toolbar:false;">切換到root用戶 命令:su 輸入密碼:123456
啟動:
sudo service influxdb start
重啟:
service influxdb restart
切換到普通用戶:
命令:exit