共計(jì) 2820 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān) influxdb 的原理和用法是什么,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
influxdb 是什么
influxdb 是一個(gè)由 go 語(yǔ)言開(kāi)發(fā)的、用于存儲(chǔ)和分析時(shí)間序列數(shù)據(jù)的開(kāi)源數(shù)據(jù)庫(kù)。特點(diǎn)如下:
內(nèi)置 HTTP 接口,使用方便
數(shù)據(jù)可以打標(biāo)記,查讓查詢可以很靈活
類 SQL 的查詢語(yǔ)句
安裝管理很簡(jiǎn)單,并且讀寫(xiě)數(shù)據(jù)很高效
能夠?qū)崟r(shí)查詢,數(shù)據(jù)在寫(xiě)入時(shí)被索引后就能夠被立即查出
支持?jǐn)?shù)據(jù)存儲(chǔ)策略 (RP) 和數(shù)據(jù)歸檔(CQ)
更多的描述,可以看 influxdb 官方描述。
influxdb 安裝
我們可以直接從官方下載二進(jìn)制安裝,也可以基于 docker 鏡像來(lái)安裝。基于 docker 鏡像安裝,執(zhí)行如下命令即可
docker run -d –name influxdb -p 8860:8086 \
-v $PWD/influxdb.conf:/usr/local/influxdb/influxdb.conf:ro \
-v $PWD:/data/influxdb \
influxdb -config /usr/local/influxdb/influxdb.conf
參數(shù)描述:
-d:在后臺(tái)運(yùn)行容器,并打印出容器 id
–name influxdb 指定容器的名字
-p 8081:8082 指定端口映射,將宿主機(jī)的 8860 端口,映射到容器的 8086 端口
-v $PWD/influxdb.conf:/usr/local/influxdb/influxdb.conf:ro 將當(dāng)前目錄下面 influxdb.conf 掛載到容器的 /usr/local/influxdb/influxdb.conf 目錄。因?yàn)槟J(rèn)掛載的路徑權(quán)限為讀寫(xiě),通過(guò) ro,可以限制權(quán)限為只讀,防止容器中修改配置文件。
-v $PWD:/data/influxdb 將當(dāng)前目錄,掛載到容器的 /data/infludb 目錄。這樣,我們可以指定 infludb 的數(shù)據(jù)文件,寫(xiě)到 /data/infludb 這個(gè)目錄,這樣可以實(shí)現(xiàn)數(shù)據(jù)的落盤(pán)。
influxdb 相關(guān)概念
在使用 infludb 之前,我們先了解一波它的一些概念,比如 database、Retention Policy、measurement、Continuous Query、point、field、tag 等。首先,整體認(rèn)識(shí)一下:
1、database
database 即數(shù)據(jù)庫(kù),可以類比 mysql、mongo 等數(shù)據(jù)庫(kù)。
create database test – 創(chuàng)建數(shù)據(jù)庫(kù)
show databases – 展示所有數(shù)據(jù)庫(kù)
use test – 選擇使用的數(shù)據(jù)庫(kù)
2、Retention Policy
retention policy,即存儲(chǔ)策略,簡(jiǎn)稱 RP,用來(lái)控制數(shù)據(jù)庫(kù)的存儲(chǔ)時(shí)間。InfluxDB 會(huì)比較服務(wù)器本地的時(shí)間戳和你數(shù)據(jù)的時(shí)間戳,并刪除比 RP 里面的持續(xù)時(shí)間更老的數(shù)據(jù)。單個(gè)數(shù)據(jù)庫(kù)中可以有多個(gè) RP,但是每個(gè)數(shù)據(jù)的 RP 是唯一的。RP 的相關(guān)操作如下:
查看數(shù)據(jù)庫(kù) test 的 rp
SHOW RETENTION POLICIES ON test
給 test 數(shù)據(jù)庫(kù)創(chuàng)建新的 rp
CREATE RETENTION POLICY rp_name ON db_name DURATION 3w REPLICATION 1 DEFAULT
rp_name:RP 策略名
db_name:具體的數(shù)據(jù)庫(kù)名
3w:設(shè)置數(shù)據(jù)保存 3 個(gè)星期,3 個(gè)星期之前的數(shù)據(jù)將被刪除,infludb 它具有各種時(shí)間參數(shù),比如:h(小時(shí)), d(天),w(星期)
REPLICATION 1:副本個(gè)數(shù),這里填 1 就可以了。
DEFAULT 設(shè)為默認(rèn)的策略。
修改數(shù)據(jù)庫(kù)的 rp
修改 rp 使用如下命令:
CREATE RETENTION POLICY rp_name ON db_name DURATION 3d DEFAULT
刪除數(shù)據(jù)庫(kù)的 rp
DROP RETENTION POLICY rp_name ON db_name
3、measurement
measurement,可以類比傳統(tǒng)數(shù)據(jù)庫(kù)中的表。傳統(tǒng)額數(shù)據(jù)庫(kù),支持增刪改查,infludb 僅僅支持增和查,刪除可以同 RP 來(lái)實(shí)現(xiàn)。
數(shù)據(jù)的插入
influxdb 支持 http 和 rpc 方式來(lái)插入數(shù)據(jù),當(dāng)然也支持命令行方式插入數(shù)據(jù),如下:
use test – 使用 test 數(shù)據(jù)庫(kù)
insert weather,altitude=1000,area= 北 temperature=11,humidity=-4
其中:
weather:表名,即 measurement 的名字
altitude=1000,area= 北 為 tag,可以把 tag 理解為 mysql 中帶索引的列。
temperature=11,humidity=-4 為 field,,可以把 field 理解為 mysql 中不帶索引的列。
針對(duì)每條插入的數(shù)據(jù),influxdb,會(huì)自動(dòng)加一列,列的名字為 time,用于記錄當(dāng)前數(shù)據(jù)的時(shí)間。
數(shù)據(jù)的查詢
influxdb 支持 where、group、order、limit 等字句。如下:
select * from weather order by time desc limit 5
4、連續(xù)查詢(Continuous Queries)
influxdb 中的數(shù)據(jù),當(dāng)超過(guò)保存策略里指定的時(shí)間之后,就會(huì)被刪除。如果我們不想刪除掉,但是又擔(dān)心容量過(guò)大怎么辦呢? 可以對(duì)數(shù)據(jù)采用更大的粒度,進(jìn)行歸檔,即以降低精度為代價(jià)。比如把原先每秒的數(shù)據(jù),歸檔存為分鐘的數(shù)據(jù),把原先分鐘的數(shù)據(jù),歸檔存為每小時(shí)或每天的數(shù)據(jù)等,這樣在容量固定的情況下,可以存儲(chǔ)更多的數(shù)據(jù)。在 influxdb 中,這種操作,叫連續(xù)查詢(Continuous Queries)。
查看數(shù)據(jù)庫(kù)的 Continuous Queries
SHOW CONTINUOUS QUERIES
創(chuàng)建 Continuous Queries
1CREATE CONTINUOUS QUERY cq_3d ON testDb BEGIN SELECT mean(age) as age INTO test_3days FROM test GROUP BY time(3d), * END
其中:cq_3d:連續(xù)查詢的名字
testDb:具體的數(shù)據(jù)庫(kù)名。
mean(age) as age: 計(jì)算 age 的平均值,后并字段名改為 age
test:measurement 名稱,即基數(shù)據(jù)庫(kù)哪個(gè)表進(jìn)行歸檔
test_3days:measurement 名稱,數(shù)據(jù)歸檔后,存儲(chǔ)的表名。
3d:歸檔的頻率,即每間隔 3 天,歸檔一次。
*:針對(duì)所有的 tag 進(jìn)行 group by 操作,當(dāng)然我們也可以基于特定的 tag 來(lái) group by 操作。需要注意,針對(duì)哪些 tags 進(jìn)行 group by 操作,那么歸檔后的表 test_3days 中,就會(huì)有哪些 tags。
刪除 Continuous Queries
刪除操作命令如下:
DROP CONTINUOUS QUERY ON
看完上述內(nèi)容,你們對(duì) influxdb 的原理和用法是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。