您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關influxdb的原理和用法是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
influxdb是什么
influxdb是一個由go語言開發的、用于存儲和分析時間序列數據的開源數據庫。特點如下:
內置HTTP接口,使用方便
數據可以打標記,查讓查詢可以很靈活
類SQL的查詢語句
安裝管理很簡單,并且讀寫數據很高效
能夠實時查詢,數據在寫入時被索引后就能夠被立即查出
支持數據存儲策略(RP)和數據歸檔(CQ)
更多的描述,可以看influxdb官方描述。
influxdb安裝
我們可以直接從官方下載二進制安裝,也可以基于docker鏡像來安裝。基于docker鏡像安裝,執行如下命令即可
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
參數描述:
-d :在后臺運行容器,并打印出容器id
--name influxdb 指定容器的名字
-p 8081:8082 指定端口映射,將宿主機的8860端口,映射到容器的8086端口
-v $PWD/influxdb.conf:/usr/local/influxdb/influxdb.conf:ro 將當前目錄下面influxdb.conf掛載到容器的/usr/local/influxdb/influxdb.conf目錄。因為默認掛載的路徑權限為讀寫,通過ro,可以限制權限為只讀,防止容器中修改配置文件。
-v $PWD:/data/influxdb 將當前目錄,掛載到容器的 /data/infludb目錄。這樣,我們可以指定infludb的數據文件,寫到 /data/infludb這個目錄,這樣可以實現數據的落盤。
influxdb相關概念
在使用infludb之前,我們先了解一波它的一些概念,比如database、Retention Policy、measurement、Continuous Query、point、field、tag等。首先,整體認識一下:
1、database
database即數據庫,可以類比mysql、mongo等數據庫。
create database "test" --創建數據庫
show databases --展示所有數據庫
use test --選擇使用的數據庫
2、Retention Policy
retention policy,即存儲策略,簡稱RP,用來控制數據庫的存儲時間。 InfluxDB會比較服務器本地的時間戳和你數據的時間戳,并刪除比RP里面的持續時間更老的數據。單個數據庫中可以有多個RP,但是每個數據的RP是唯一的。RP的相關操作如下:
查看數據庫 test的rp
SHOW RETENTION POLICIES ON "test"
給test數據庫創建新的rp
CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 3w REPLICATION 1 DEFAULT
rp_name:RP策略名
db_name:具體的數據庫名
3w:設置數據保存3個星期,3個星期之前的數據將被刪除,infludb它具有各種時間參數,比如:h(小時), d(天),w(星期)
REPLICATION 1:副本個數,這里填1就可以了。
DEFAULT 設為默認的策略。
修改數據庫的rp
修改rp使用如下命令:
CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 3d DEFAULT
刪除數據庫的rp
DROP RETENTION POLICY "rp_name" ON "db_name"
3、measurement
measurement,可以類比傳統數據庫中的表。傳統額數據庫,支持增刪改查,infludb僅僅支持增和查,刪除可以同RP來實現。
數據的插入
influxdb支持http和rpc方式來插入數據,當然也支持命令行方式插入數據,如下:
use test --使用 test數據庫
insert weather,altitude=1000,area=北 temperature=11,humidity=-4
其中:
weather : 表名,即measurement的名字
altitude=1000,area=北 為tag,可以把tag理解為mysql中帶索引的列。
temperature=11,humidity=-4 為field,,可以把field理解為mysql中不帶索引的列。
針對每條插入的數據,influxdb,會自動加一列,列的名字為time,用于記錄當前數據的時間。
數據的查詢
influxdb支持 where、group、order、limit等字句。如下:
select * from weather order by time desc limit 5
4、連續查詢(Continuous Queries)
influxdb中的數據,當超過保存策略里指定的時間之后,就會被刪除。如果我們不想刪除掉,但是又擔心容量過大怎么辦呢?可以對數據采用更大的粒度,進行歸檔,即以降低精度為代價。比如把原先每秒的數據,歸檔存為分鐘的數據,把原先分鐘的數據,歸檔存為每小時或每天的數據等,這樣在容量固定的情況下,可以存儲更多的數據。在influxdb中,這種操作,叫連續查詢(Continuous Queries)。
查看數據庫的Continuous Queries
SHOW CONTINUOUS QUERIES
創建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:連續查詢的名字
testDb:具體的數據庫名。
mean(age) as age: 計算age的平均值,后并字段名改為age
test: measurement名稱,即基數據庫哪個表進行歸檔
test_3days: measurement名稱,數據歸檔后,存儲的表名。
3d:歸檔的頻率,即每間隔3天,歸檔一次。
* :針對所有的tag進行group by操作,當然我們也可以基于特定的tag來group by操作。需要注意,針對哪些tags進行group by操作,那么歸檔后的表test_3days中,就會有哪些tags。
刪除Continuous Queries
刪除操作命令如下:
DROP CONTINUOUS QUERY ON
看完上述內容,你們對influxdb的原理和用法是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。