致讀者
史上最全I(xiàn)nfluxDb教程地址:InfluxDb中文教程
InfluxDB安裝完成之后鳍刷,我們開始來做一些有意思的事洼哎。在這一章里面我們將會(huì)用到influx這個(gè)命令行工具,這個(gè)工具包含在InfluxDB的安裝包里华糖,是一個(gè)操作數(shù)據(jù)庫的輕量級(jí)命令行工具。它直接通過InfluxDB的HTTP接口(如果沒有修改,默認(rèn)是8086)來和InfluxDB通信缤剧。
說明:也可以直接發(fā)送裸的HTTP請(qǐng)求來操作數(shù)據(jù)庫,例如curl域慷,我們后面在介紹rest這種接口荒辕,但是會(huì)稍微復(fù)雜一些。
1犹褒、InfluxDB創(chuàng)建數(shù)據(jù)庫
如果你已經(jīng)在本地安裝運(yùn)行了InfluxDB抵窒,你就可以直接使用influx命令行,執(zhí)行influx連接到本地的InfluxDB實(shí)例上叠骑。輸出就像下面這樣:
說明:
- InfluxDB的HTTP接口默認(rèn)起在
8086
上李皇,所以influx
默認(rèn)也是連的本地的8086
端口,你可以通過influx --help
來看怎么修改默認(rèn)值宙枷。 -
-precision
參數(shù)表明了任何返回的時(shí)間戳的格式和精度掉房,在上面的例子里茧跋,rfc3339
是讓InfluxDB返回RFC339格式(YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)的時(shí)間戳。
這樣這個(gè)命令行已經(jīng)準(zhǔn)備好接收influx的查詢語句了卓囚,用exit
可以退出命令行瘾杭。
第一次安裝好InfluxDB之后是沒有數(shù)據(jù)庫的(除了系統(tǒng)自帶的_internal
),因此創(chuàng)建一個(gè)數(shù)據(jù)庫是我們首先要做的事捍岳,通過CREATE DATABASE <db-name>
這樣的InfluxQL語句來創(chuàng)建富寿,其中<db-name>
就是數(shù)據(jù)庫的名字。數(shù)據(jù)庫的名字可以是被雙引號(hào)引起來的任意Unicode字符锣夹。如果名稱只包含ASCII字母页徐,數(shù)字或下劃線,并且不以數(shù)字開頭银萍,那么也可以不用引起來变勇。
2、創(chuàng)建一個(gè)mydb數(shù)據(jù)庫
我們來創(chuàng)建一個(gè)mydb
數(shù)據(jù)庫:
CREATE DATABASE mydb
說明:在輸入上面的語句之后贴唇,并沒有看到任何信息搀绣,這在CLI里,表示語句被執(zhí)行并且沒有錯(cuò)誤戳气,如果有錯(cuò)誤信息展示链患,那一定是哪里出問題了,這就是所謂的
沒有消息就是好消息
瓶您。這一點(diǎn)很多人都不習(xí)慣麻捻,因?yàn)樵趍ysql中,會(huì)有反饋呀袱,influxdb沒有反饋贸毕,讓人覺得不知道發(fā)生了什么。
現(xiàn)在數(shù)據(jù)庫mydb
已經(jīng)創(chuàng)建好了夜赵,我們可以用SHOW DATABASES
語句來看看已存在的數(shù)據(jù)庫明棍,也可以用小寫的show databases:
>> SHOW DATABASES
name: databases
---------------
name
_internal
mydb
說明:
_internal
數(shù)據(jù)庫是用來存儲(chǔ)InfluxDB內(nèi)部的實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)的。
不像SHOW DATABASES
寇僧,大部分InfluxQL需要作用在一個(gè)特定的數(shù)據(jù)庫上摊腋。你當(dāng)然可以在每一個(gè)查詢語句上帶上你想查的數(shù)據(jù)庫的名字,但是CLI提供了一個(gè)更為方便的方式USE <db-name>
婉宰,這會(huì)為你后面的所以的請(qǐng)求設(shè)置到這個(gè)數(shù)據(jù)庫上歌豺。例如:
| > USE mydb |
| Using database mydb |
| > |
以下的操作都作用于mydb
這個(gè)數(shù)據(jù)庫之上,在mysql
上也是這么操作的。
3心包、Influxdb寫數(shù)據(jù)
現(xiàn)在我們已經(jīng)有了一個(gè)數(shù)據(jù)庫,那么InfluxDB就可以開始接收讀寫了馒铃。
首先對(duì)數(shù)據(jù)存儲(chǔ)的格式來個(gè)入門介紹蟹腾。InfluxDB里存儲(chǔ)的數(shù)據(jù)被稱為時(shí)間序列數(shù)據(jù)
痕惋,其包含一個(gè)數(shù)值,這個(gè)數(shù)字一般是時(shí)間娃殖,這個(gè)時(shí)間可以用數(shù)字來表示值戳。
時(shí)序數(shù)據(jù)有零個(gè)或多個(gè)數(shù)據(jù)點(diǎn),每一個(gè)都是一個(gè)指標(biāo)值炉爆。數(shù)據(jù)點(diǎn)包括time
(一個(gè)時(shí)間戳)堕虹,measurement
(度量),至少一個(gè)k-v格式的field
(也就是鍵值對(duì) “value=0.64”或者“temperature=21.2”)芬首,零個(gè)或多個(gè)標(biāo)簽tag
赴捞,其一般是對(duì)于這個(gè)指標(biāo)值的元數(shù)據(jù)(例如“host=server01”, “region=EMEA”, “dc=Frankfurt)。
在概念上郁稍,你可以將measurement
類比于SQL里面的table赦政,其主鍵索引總是時(shí)間戳。tag
和field
是在table里的其他列耀怜,tag
是被索引起來的恢着,field
沒有。不同之處在于财破,在InfluxDB里掰派,你可以有幾百萬的measurements,你不用事先定義數(shù)據(jù)的scheme(模式)左痢,并且null值不會(huì)被存儲(chǔ)靡羡。
將數(shù)據(jù)點(diǎn)寫入InfluxDB,只需要遵守如下的插入?yún)f(xié)議:
| insert <measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp] |
中擴(kuò)號(hào)中的內(nèi)容抖锥,是可選的亿眠,可以有,有可以沒有磅废。
上面說了measurement類似表名纳像,那么上面的語義就是: 向某個(gè)表插入一些數(shù)據(jù)。插入語句必要有如下特點(diǎn):
- 1個(gè)表名measurement
- 0個(gè)或多個(gè)tag標(biāo)簽
- 1個(gè)或多個(gè)field
- 一個(gè)可選的時(shí)間戳unix-nano-timestamp
下面是數(shù)據(jù)寫入InfluxDB的格式示例:
| insert cpu,host=serverA,region=us_west value=0.64 |
| payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230 |
cpu是表的意思拯勉,其他幾個(gè)等號(hào)連接起來的是鍵值對(duì)竟趾,最后一個(gè)是時(shí)間戳。
舉個(gè)例子:
使用命令行插入單條的時(shí)間序列數(shù)據(jù)到InfluxDB中宫峦,用INSERT
后跟數(shù)據(jù)點(diǎn):
INSERT cpu,host=serverA,region=us_west value=0.64
這樣一個(gè)measurement為cpu
岔帽,tag是host
和region
,value
值為0.64
的數(shù)據(jù)點(diǎn)被寫入了InfluxDB中导绷。注意沒有寫時(shí)間犀勒,表示默認(rèn)是系統(tǒng)時(shí)間。
注意上面的
空格
是tag和field的分界點(diǎn)
4、Influxdb查詢數(shù)據(jù)
現(xiàn)在我們查出寫入的這筆數(shù)據(jù):
| use mydb |
| SELECT "host", "region", "value" FROM "cpu" |
執(zhí)行結(jié)果如下:
說明:我們?cè)趯懭氲臅r(shí)候沒有包含時(shí)間戳贾费,當(dāng)沒有帶時(shí)間戳的時(shí)候钦购,InfluxDB會(huì)自動(dòng)添加本地的當(dāng)前時(shí)間作為它的時(shí)間戳。
讓我們來寫入另一筆數(shù)據(jù)褂萧,它包含有兩個(gè)字段:
| INSERT temperature,machine=unit42,type=assembly external=25,internal=37 |
- temperature 是表名measurement
- machine和type是標(biāo)簽tag
- external和internal是field
- tag和field之間用空格隔開
查詢的時(shí)候想要返回所有的字段和tag押桃,可以用*
,和mysql的語法基本一致导犹。
| > SELECT * FROM "temperature" |
| name: temperature |
| ----------------- |
| time external internal machine type |
| 2015-10-21T19:28:08.385013942Z 25 37 unit42 assembly |
InfluxQL還有很多特性和用法沒有被提及唱凯,包括支持golang樣式的正則,例如:
| SELECT * FROM /.*/ LIMIT 1 |
這表示查出所有表中的一條數(shù)據(jù)谎痢,如下:
5磕昼、小結(jié)
本章只是開始,有更多的關(guān)于Influxdb的讀寫的操作舶得,請(qǐng)繼續(xù)關(guān)注后面的文章掰烟。