InfluxDB用Go语言编写的一个开源分布式时序、事件和指标数据库,用于处理海量写入与负载查询。InfluxDB旨在用作涉及大量时间戳数据的任何用例(包括DevOps监控,应用程序指标,物联网传感器数据和实时分析)的后端存储。
influxdb | 传统数据库 |
---|---|
database | 数据库 |
measurement | 数据库中的表 |
points | 表里面的一行数据 |
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point属性 | 传统数据库中的概念 |
---|---|
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
fields | 字段 |
tags | 索引字段 |
# 显示用户
SHOW USERS
# 创建用户
CREATE USER "username" WITH PASSWORD 'password'
# 创建管理员权限的用户
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES
# 删除用户
DROP USER "username"
#创建数据库
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"
use testDB
#tag必须是字符串类型所以中文可以不加引号 field如果是中文必须带引号
insert weather,altitude=1000,area=北 temperature=11,humidity=-4
curl -curl i -XPOST 'http://localhost:8086/write?db=testDB' --data-binary 'weather,altitude=1000,area=北 temperature=11,humidity=-4'
use testDB
# 查询最新的三条数据
SELECT * FROM weather ORDER BY time DESC LIMIT 3
#时间格式
precision rfc3339
#注意时间与中国时间差8小时 windows环境需要安装golang环境后在查询语句后加TZ('Asia/Shanghai') 或者在代码中手动-8小时
select * from weather where time >='2022-02-25T10:00:00Z'
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testDB" --data-urlencode "q=SELECT * FROM weather ORDER BY time DESC LIMIT 3"
where中的条件,只允许根据时间来进行删除操作
delete from weather where time=1645775285847244500
在InfluxDB中并没有提供数据的修改方法。
InfluxDB没有提供直接删除Points的方法,但是它提供了Retention Policies。
主要用于指定数据的保留时间:当数据超过了指定的时间之后,就会被删除
SHOW RETENTION POLICIES ON "test"
CREATE RETENTION POLICY "test_rp" ON "test" DURATION 30d REPLICATION 1 DEFAULT
rp_name:策略名
db_name:具体的数据库名
30d:保存30天,30天之前的数据将被删除
它具有各种时间参数,比如:h(小时),w(星期)
REPLICATION 1:副本个数,这里填1就可以了
DEFAULT 设为默认的策略
ALTER RETENTION POLICY "rp_name" ON db_name" DURATION 3w DEFAULT
ALTER RETENTION POLICY "test_rp" ON test" DURATION 3w DEFAULT
DROP RETENTION POLICY "rp_name" ON "db_name"
DROP RETENTION POLICY "test_rp" ON "test"
当数据超过保存策略里指定的时间之后,就会被删除。
如果我们不想完全删除掉,比如做一个数据统计采样:把原先每秒的数据,存为每小时的数据,让数据占用的空间大大减少(以降低精度为代价)。
这就需要InfluxDB提供的:连续查询(Continuous Queries)
SHOW CONTINUOUS QUERIES
CREATE CONTINUOUS QUERY cq_30s ON test BEGIN SELECT mean(temperature) INTO weather30s FROM weather GROUP BY time(30s) END
cq_30s:连续查询的名字
test:具体的数据库名
mean(temperature): 算平均温度
weather: 当前表名
weather30s: 存新数据的表名
30s:时间间隔为30秒
DROP CONTINUOUS QUERY <cq_name> ON <database_name>
DROP CONTINUOUS QUERY cq_30s ON test
见代码