美文网首页
Ubuntu使用InfluxDB极简例子

Ubuntu使用InfluxDB极简例子

作者: 赤色要塞满了 | 来源:发表于2022-10-05 19:11 被阅读0次

可以认为InfluxDB是一个主键为时间的数据库,官网有免费体验:

https://cloud2.influxdata.com/signup

不过手头刚好白瞎了一台Ubuntu,试试。

安装

curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
source /etc/lsb-release
echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

然后:

sudo apt-get update # 云服务器如果有限制,跳过
sudo apt-get install influxdb
sudo service influxdb start

看看状态:

image.png
查看配置,使用influxd config,可以看到一些端口:
image.png
默认是外网也能访问的,云服务器可以开一下8086端口的安全组。测试下连接,rfc3339为时间格式:
influx -precision rfc3339 # 直接influx也行

如果报错,可能需要安装一下:

sudo apt install influxdb-client

最后没问题:


image.png

使用

类似mysql

> create database food_data
> show databases
name: databases
name
----
_internal
food_data

> use food_data
Using database food_data

读写数据

使用POST即可插入数据,InfluxDBschema不需要提前定义,可直接插入,写个脚本定时插入:

import requests
import random
import time

count = 0
while True:
    place = random.choice(['home', 'cafe', 'hotel'])
    phone = random.randint(1, 60)
    website = random.randint(1, 100)
    s = f'orders,place={place} phone={phone},website={website}'
    res = requests.post('http://yourIP:8086/write?db=food_data',
                        data=s.encode())
    count += 1
    print(count, s)
    time.sleep(random.randint(1, 60))

其中ordersmeasurement,相当于表名。
placetag,可以有多个tag,形成tag settag不是必须的,但一般都加上,另外,上面的代码如果不加tag会报错,待研究。
phonewebsitefieldfieldtag都是key-value型的,field默认为floattag只能是stringtag可以索引,field无法索引,所以查询tag快一些,需要查询、聚合、元数据的字段最好设计为tag,但tag不宜过多,比如姓名就不适合。
可以在客户端查询看到结果:

image.png
可以通过脚本插入数据。

CQ和RP

试试设置连续查询CQ保留策略RP,自动定期执行,来实现数据采样和保留,类似滑动窗口。下面的语句给数据库food_data创建一个只保留2小时内的数据的默认保留策略,这将覆盖掉本来默认的永久保留的autogen策略。REPLICATION为副本,单点为1,多节点需要付费使用,可以先忽略。

> CREATE RETENTION POLICY "two_hours" ON "food_data" DURATION 2h REPLICATION 1 DEFAULT

在创建一个非默认的1年保留策略,数据库里的measurement必须指定才能使用这个策略,否则还是用上面的two_hours

CREATE RETENTION POLICY "a_year" ON "food_data" DURATION 52w REPLICATION 1

再创建一个连续查询,注意不分行:

> CREATE CONTINUOUS QUERY "cq_30m" ON "food_data" BEGIN
  SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone"
  INTO "a_year"."downsampled_orders"
  FROM "orders"
  GROUP BY time(30m)
END

这会将orders里的数据,每30分钟平均聚合一下,存入downsampled_orders表,且该表的保留策略为a_year。由于之前写了定时脚本产生数据到orders表,经过一段时间,downsampled_orders表会自动聚合采样数据,时间为每个半小时的起始时间戳,精确到纳秒。

image.png

相同的RQmeasurementtag set形成series;相同series且相同timestampfield set,形成point。在一个series里,pointtimestamp是唯一的,无法写入相同timestamppoint

总结

时序数据库的增删改查,只把技能点在了增和查。

相关文章

网友评论

      本文标题:Ubuntu使用InfluxDB极简例子

      本文链接:https://www.haomeiwen.com/subject/lflpartx.html