influxdb采坑集锦

influxQL查询

tag过滤:

select * from "rp_one_month"."rp_video_blocked" where event_type='4'

field过滤:

select * from "rp_one_month"."rp_video_blocked" where blocked_duration>30

select * from "rp_one_month"."rp_video_blocked" where session_id='1625450606237307159_914'

注:

  1. 单引号表示字符串,双引号是要报错的!
  2. 如果设置了retention policy,查询时要带上,否则,返回空

关于retention policy

支持针对不同的measurement数据,使用定制rp

创建rp:

create database stat_rp_one_month with duration 30d replication 1

flux写入数据时,bucket加入rp信息

bucket:"stat/rp_one_month"

flux读取数据时,bucket也加入rp信息

from(bucket:"stat/rp_one_month")

                   |> range(start: 1631946180, stop: 1631957400)

             |> filter(fn: (r) => r._measurement == "rp_rtt_and_packets_lost")

                   |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")

                   |> filter(fn: (r) => r.session_id=="1625450606237307159_914")

flux读取数据

from(bucket:"stat/rp_one_month")

                   |> range(start: 1629697950, stop: 1632289950)

             |> filter(fn: (r) => r._measurement == "rp_session_infos")

                   |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")

                   |> filter(fn: (r) => r.user_id==2)

                   |> sort(columns: ["_time"], desc: true)

                   |> group(columns: ["event_type","state"])

                   |> unique(column: "session_id")

                   |> limit(n:20, offset: 0)

pivot能将measurement根据tag field 分成的一条条数据,组装成以时间为维度的类似数据库的一条条数据。

  1. 随后的很关键的|>每一个都是把前面命令的输出作为下一条命令的输入。
  2. 默认的数据会根据不同的tag值进行分组成表。如果想放在一个表里,要自己选择column进行分组。
  3. 每个函数是单独作用在每个表里的,而不是全部数据的。像limit是取前面数据生成的N个表里,每个数据做多n个,而不是全部数据。

标准时区陷阱

|> aggregateWindow(every: 1d, fn: count)

如果按照天为单位或周为单位,进行数据统计的话,默认取值范围是按照标准时区的一天来取值统计的,而不是我们本地时区的时间范围(北京时间)。fluxQL可以指定时区,flux暂时无解。

记录覆盖

同一个measurement中,当时间戳一致,tag的值一致时,后一条记录会覆盖前一条记录。

如果我们输入的时间戳精确到秒的话,那么,同一秒内的相同tag取值、不同field取值的数据很可能被覆盖丢失。所以,在设计的时候,tag的设计很重要,时间戳精确到纳秒能减小类似丢失的概率。

tag选取

每个tag相当于一个索引,不同的tag取值会对应一个索引文件,那么如果tag的不同取值很多很多,对应的索引文件就会很多很多,默认上限10万条,超过了,数据就会被丢弃,引起下面的告警日志。

2021/08/27 23:47:51 influxdb2client E! Write error: 400 Bad Request: partial write: max-values-per-tag limit exceeded (100000/100000): measurement="experiences" tag="session_id" value="1630079269427228172_17182" dropped=1

所以,tag的选取尽量取值范围可控,不要随业务无限增长,像用户ID、会话ID这种跟业务耦合的就不太适合选做tag,如果不得不选做tag的话,一方面要面临爆仓的风险,一方面就要考虑扩大服务器资源、设置合理RP,尽量减少爆仓的可能性。

uint64数据写不进

filed数据类型写uint64会导致数据写不进

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值