一、InfluxDB 簡介
InfluxDB 是用Go語言編寫的一個開源分布式時序、事件和指標數據庫,無需外部依賴。類似的數據庫有Kairosdb、OpenTsdb等。
三大特性:
時序性(Time Series):與時間相關的函數的靈活使用(諸如最大、最小、求和等);
度量(Metrics):對實時大量數據進行計算;
事件(Event):支持任意的事件數據,換句話說,任意事件的數據我們都可以做操作。
有以下七大特點:
1)schemaless(無結構),可以是任意數量的列;
2)可拓展的;
3)支持min, max, sum, count, mean, median 等一系列函數,方便統計;
4)原生的HTTP支持,內置HTTP API;
5)強大的類SQL語法;
6)自帶管理界面,方便使用,Built-in Explorer 自帶管理工具;
7)Powerful Query Language 類似sql;
influxdb的兩個http端口:
port 8083:管理頁面端口,訪問localhost:8083可以進入你本機的influxdb管理頁面;
port 8086:http連接influxdb client端口,一般使用該端口往本機的influxdb讀寫數據。
二、基本操作:
influxdb相關名詞
database:數據庫;
measurement:數據庫中的表;
points:表里面的一行數據。
influxDB中獨有的一些概念
Point由時間戳(time)、數據(field)和標簽(tags)組成。
time:每條數據記錄的時間,也是數據庫自動生成的主索引;
fields:各種記錄的值;
tags:各種有索引的屬性
數據庫與表的操作:
#進入influxDB數據庫
influx
#創建數據庫
create database "db_name"
#顯示所有的數據庫
show databases
#刪除數據庫
drop database "db_name"
#使用數據庫
use db_name
#顯示該數據庫中所有的表
show measurements
#創建表,直接在插入數據的時候指定表名
insert test,host=127.0.0.1,monitor_name=test count=1
#刪除表
drop measurement "measurement_name"
#清空數據庫表里面的數據
delete from tbname
InfluxDB中既有顯式的新建表的語句,也有通過insert數據的方式來建立新表
insert tbname,hostname=server01 value=4422
其中 tbname就是表名,hostname是索引(tag),value=xx是記錄值(field),記錄值可以有多個,系統自帶追加時間戳或者添加數據時,自己寫入時間戳
insert tbname,hostname=server01 value=442221834240i 1435362189575692182
show retention policies on "db_name" 查看當前數據庫Retention Policies
創建新的Retention Policies
create retention policy "rp_name" on "db_name" duration 3w replication 1 default
查看measurement里面的tags和fields
show tag keys from measurement_name
show field keys from measurement_name
select * from measurement_name
創建新的Retention Policies
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:設置為默認策略
創建新的Continous Queries
create continous query cq_name on db_name begin select sum(count) into new_table_name from table_name group by time(30m) end
- cq_name:連續查詢名字;
- db_name:數據庫名字;
- sum(count):計算總和;
- table_name:當前表名;
- new_table_name:存新的數據的表名;
- 30m:時間間隔為30分鍾
三、數據錄入
InfluxDB三種操作方式:
客戶端命令行方式
插入數據:
curl -i -X POST 'http://localhost:8086/write?db=monitor' --data-binary 'monitor,host=server01,region=us-west value=0.60'
查詢數據:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=monitor" --data-urlencode "q=SELECT * FROM measurement_name "
HTTP API接口
插入數據
Postman: http://localhost:8086/write?db=monitor&u=root&p=123456
Body: measurement_name,host=localhost,name=zhangsan sex=male,age=20
measurement_name相當於表名,host=localhost,name=zhangsan 是tagset,類似索引,sex=male,age=20 是filed字段,也就是存到數據庫里面的數據。
查詢數據: 查詢結果以Json的數據格式返回
http://localhost:8086/query?db=monitor&q=SELECT * FROM measurement_name
各種語言API庫
Influxdb有針對各種語言的API
Java maven依賴
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.7</version>
</dependency>
Influxdb的數據保留策略:
InfluxDB的數據保留策略(RP)用來定義數據在InfluxDB中存放的時間,或者定義保存某個期間的數據。一個數據庫可以有多個保留策略,但每個策略必須是獨一無二的。
show retention policies on dbName 可以查看指定數據庫的數據保留策略.
其中duration是數據保留時間,shardGroupDuration是每個shard上的數據的時間跨度,replicaN是數據的副本數量,default是指這個retention policy是否是指定數據庫的默認數據保留策略
創建數據保留策略並設置為默認數據保留策略
create retention policy "2_hours" on "monitor" duraption 2h replication 1 default
修改數據保留策略
alter retention policy "2_hours" on "monitor" duraption 4h default
刪除數據保留策略
drop retention policy "2_hours" on "monitor"
四、用戶管理
#顯示用戶
show users
#創建用戶
create user "username" with password 'password'
#創建管理員權限用戶
create user "username" with password 'password' with all privileges
#刪除用戶
drop user "username"
InfluxDB參考官方文檔: https://docs.influxdata.com/influxdb/v1.4/