首页 > 编程开发 > InfluxDB 学习
2024
10-17

InfluxDB 学习

1 安装

使用的端口:

8086: C/S 架构下的 HTTP 通信

8088: 备份、恢复数据的 RPC 服务使用

yum install influxdb
service influxdb start

# 也可以
yum install influxdb
systemctl start influxdb

2 入门指南

创建数据库

# 执行influx命令行
influx -precision rfc3339

# 退出
exit

# 创建数据库
CREATE DATABASE mydb

# 查看已存在的数据库
SHOW DATABASES

# 使用数据库
USE mydb

# 删除数据库
DROP DATABASE mydb

读写数据

InfluxDB保存的是时间序列数据,一条时序数据记录一个时间点上的多个数据点

measurement -> table 主键是时间戳

tag 带索引的列

field 不带索引的列

数据格式

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
cpu,host=serverA,region=us_west value=0.64
payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230
stock,symbol=AAPL bid=127.46,ask=127.48
temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000

插入单条数据

INSERT cpu,host=serverA,region=us_west value=0.64

查询数据

SELECT "host", "region", "value" FROM "cpu"

3 概念介绍

3.1 关键概念

database field key field set
field value measurement point
retention policy series tag key
tag set tag value timestamp
name: census,其中butterflies和honeybees是field key, location和scientist是tag key
-————————————
time                                      butterflies     honeybees     location     scientist
2015-08-18T00:00:00Z                          12             23            1         langstroth

database 数据库

measurement 表名 两个measurement之间不支持join操作

field 不带索引的列名

tag 创建索引的列名 (tag value 只能是字符串)

InfluxDB是时序数据库,数据表中每一条数据都包含了time,是一个Unix纳秒级的时间戳,表示UTC日期和时间(RFC3339)

每组field key和field value的集合组成了field set(近似于一条数据的field部分) butterflies=12, honeybees=23

tag set是不同的每组tag key和tag value的集合

field是必须的字段,tag不是必须的字段

单个measurement可以有不同的retention policy(保留策略),retention policy描述了InfluxDB保存数据的时间(DURATION)以及这些存储在集群中数据的副本数量(REPLICATION)。

默认的retention policy是autogen,duration是无线,复制因子(replication)是1.

series是共同retention policy,measurement和tag set的集合。例子如下:

任意series编号 retention policy measurement tag set
series 1 autogen census location = 1,scientist = langstroth
series 2 autogen census location = 2,scientist = langstroth
series 3 autogen census location = 1,scientist = perpetua
series 4 autogen census location = 2,scientist = perpetua

point就是具有相同timestamp的相同series的field集合。(一行数据???一个point可以包含两条数据吗???)

3.2 与SQL的区别

InfluxDB是专门为时序数据设计和优化的,使用时间作为主键,读写操作多,修改和删除数据的需求少,因此更像是一个CR-ud。

3.3 一些设计思想

InfluxDB 学习 - 第1张  | Weiguang的博客

3.4 Schema设计

InfluxDB 学习 - 第2张  | Weiguang的博客

4 使用指南

4.1 写入数据

4.1.1 使用HTTP接口创建数据库

curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"
# PostMan测试 POST方法 请求体 q=CREATE DATABASE mydb
http://localhost:8086/query

4.1.2 使用HTTP接口写数据

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'

# influx默认使用19位纳秒级时间戳,使用其他单位的时间戳写数据需要用precision参数指定
curl -i -XPOST 'http://localhost:8086/write?db=mydb&precision=s' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.65 1434055562'

4.1.3 写入文件中的数据

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary @cpu_data.txt

文件里的数据格式需要满足InfluxDB那种行的语法,举例如下:

cpu_load_short,host=server02 value=0.67
cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257

说明:如果你的数据文件的数据点大于5000时,你必须把他们拆分到多个文件再写入InfluxDB。因为默认的HTTP的timeout的值为5秒,虽然5秒之后,InfluxDB仍然会试图把这批数据写进去,但是会有数据丢失的风险。

4.2 查询数据

4.2.1 使用HTTP接口查询数据

返回数据为json格式,查询结果在result列表中

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=db13" --data-urlencode "q=SELECT * FROM \"field25\" WHERE \"tag25\"='True'"
最后编辑:
作者:lwg0452
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。