当前位置: 首页 > 工具软件 > InfluxDB > 使用案例 >

InfluxDB基本使用

楚彦
2023-12-01

InfluxDB是一个用于存储和分析时间序列数据的开源数据库。类似的数据库有Elasticsearch、Graphite等。Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖

InfluxDB的主要特点
无结构(无模式):可以是任意数量的列
可拓展的
支持min, max, sum, count, mean, median 等一系列函数,方便统计支持min, max, sum, count, mean, median 等一系列函数,方便统计
原生的HTTP支持,内置HTTP API原生的HTTP支持,内置HTTP API
强大的类SQL语法强大的类SQL语法
自带管理界面,方便使用自带管理界面,方便使用

注意
自带管理界面在1.2版之后,将不再提供。
集群功能在1.2版之后,也不再提供。

InfluxDB与传统数据库的比较
database    数据库
measurement    数据库的表
points    表里的一行数据

InfluxDB的独特的特性
point  :Point相当于传统数据库里的一行数据,如下表所示:

oint属性  :  传统数据库中的概念
time(时间戳)  :  每个数据记录时间,是数据库中的主索引(会自动生成)
fields(字段、数据) :   各种记录值(没有索引的属性)也就是记录的值:温度, 湿度
tags(标签):    各种有索引的属性:地区,海拔
注意
在influxdb中,字段必须存在。因为字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。
tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型。
series
相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。

官方下载地址:https://portal.influxdata.com/downloads/
官方文档:https://docs.influxdata.com/influxdb/v1.8/

描述

InfluxDB使用UTC中主机的本地时间为数据分配时间戳并用于协调目的。
使用网络时间协议(NTP)在主机之间同步时间;如果主机的时钟未与NTP同步,则写入InfluxDB的数据上的时间戳可能不准确。

默认情况下,InfluxDB使用以下网络端口:

TCP端口8086可用于使用InfluxDB API进行客户端-服务器通信。
TCP端口8088可用于RPC服务执行备份和还原操作。

 1.安装

# 下载influxdb
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.2.x86_64.rpm
# 安装influxdb
yum -y localinstall influxdb-1.8.2.x86_64.rpm
# 配置influxdb(此处可以复制配置示例)
vim /etc/influxdb/influxdb.conf  
# 设置权限
mkdir -p /mnt/data/influxdb
chown influxdb:influxdb /mnt/data/influxdb
# 启动influxdb
systemctl start influxd.service
# 设置用户、密码
influx -port 8086
create user 'username' with password 'password' with all privileges
exit

配置示例

# 配置文件 /etc/influxdb/influxdb.conf

reporting-disabled = true         # 禁用报告,默认为 false
bind-address = ":8088"
[meta]
dir = "/mnt/data/influxdb/meta"    # 元信息目录
[data]
dir = "/mnt/data/influxdb/data"    # 数据目录
wal-dir = "/mnt/data/influxdb/wal" # 预写目录
wal-fsync-delay = "10ms"          # SSD 设置为 0s,非 SSD 推荐设置为 0ms-100ms
index-version = "tsi1"            # tsi1 磁盘索引,inmem 内存索引需要大量内存
query-log-enabled = true          # 查询的日志,默认是 true
[coordinator]
write-timeout = "20s"             # 写入请求超时时间,默认为 10s
[http]
enabled = true
bind-address = ":8086"
auth-enabled = true                 # 开启认证
log-enabled = true                 # http 请求日志,默认是 true
[logging]
level = "info"                    # 日志等级,error、warn、info(默认)、debug

基本命令

# 查看默认配置
influxd config

# 指定配置文件启动
influxd -config /etc/influxdb/influxdb.conf

数据库命令

# influxdb使用命令(默认8086 配置多实例时端口不同)
influx
influx -port 8086
influx -host ip -port 8086
# 创建数据库
create database test
# 删除数据库
drop database test
# 查看数据库
show databases
# 使用数据库 
use test
# 创建普通用户
create user 'username' with password 'password'
# 创建管理员用户
create user 'username' with password 'password' with all privileges
# 登录
auth
# 修改密码
influx user password -n 'username'

查询语句
SHOW FIELD KEYS --查看当前数据库所有表的字段
SHOW series from pay --查看key数据
SHOW TAG KEYS FROM "pay" --查看key中tag key值
SHOW TAG VALUES FROM "pay" WITH KEY = "merId" --查看key中tag 指定key值对应的值
SHOW TAG VALUES FROM cpu WITH KEY IN ("region", "host") WHERE service = 'redis'
DROP SERIES FROM <measurement_name[,measurement_name]> WHERE <tag_key>='<tag_value>' --删除key
SHOW CONTINUOUS QUERIES   --查看连续执行命令
SHOW QUERIES  --查看最后执行命令
KILL QUERY <qid> --结束命令
SHOW RETENTION POLICIES ON mydb  --查看保留数据
查询数据
SELECT * FROM /.*/ LIMIT 1  --查询当前数据库下所有表的第一行记录
select * from pay  order by time desc limit 2
select * from  db_name."POLICIES name".measurement_name --指定查询数据库下数据保留中的表数据 POLICIES name数据保留
删除数据
delete from "query" --删除表所有数据,则表就不存在了
drop MEASUREMENT "query"   --删除表(注意会把数据保留删除使用delete不会)
DELETE FROM cpu
DELETE FROM cpu WHERE time < '2000-01-01T00:00:00Z'
DELETE WHERE time < '2000-01-01T00:00:00Z'
DROP DATABASE “testDB” --删除数据库
DROP RETENTION POLICY "dbbak" ON mydb --删除保留数据为dbbak数据
DROP SERIES from pay where tag_key='' --删除key中的tag

SHOW SHARDS  --查看数据存储文件
DROP SHARD 1
SHOW SHARD GROUPS
SHOW SUBSCRIPTIONS

influxdb实现模糊查询

1.实现查询以给定字段开始的数据

select fieldName from measurementName where fieldName=~/^给定字段/

2.实现查询以给定字段结束的数据

select fieldName from measurementName where fieldName=~/给定字段$/

3.实现查询包含给定字段数据

select fieldName from measurementName where fieldName=~/给定字段/

 

 类似资料: