• influxDB学习笔记


    1. 安装教程

    influxdb中,字段必须存在。因为字段是没有索引的。
    如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。
    tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。
    tag value只能是string类型。

    2.启动influx

    C:\Users\techsun>d:

    D:>cd D:\software\influxdb-1.7.4_windows_amd64\influxdb-1.7.4-1

    D:\software\influxdb-1.7.4_windows_amd64\influxdb-1.7.4-1>influx.exe

    启动influxd.exe
    C:\Users\techsun>d:

    D:>cd D:\software\influxdb-1.7.4_windows_amd64\influxdb-1.7.4-1

    D:\software\influxdb-1.7.4_windows_amd64\influxdb-1.7.4-1>influxd.exe -config influxdb.conf
    也可以写成bat文件
    在这里插入图片描述
    或者注册表中添加,设为启动项。

    1. 常用SQL
    -- 查看所有的数据库
    show databases;
    -- 使用特定的数据库
    use database_name;
    -- 查看所有的measurement
    show measurements;
    -- 查询10条数据
    select * from measurement_name limit 10;
    -- 数据中的时间字段默认显示的是一个纳秒时间戳,改成可读格式
    precision rfc3339; -- 之后再查询,时间就是rfc3339标准格式
    -- 或可以在连接数据库的时候,直接带该参数
    influx -precision rfc3339
    -- 查看一个measurement中所有的tag key 
    show tag keys
    -- 查看一个measurement中所有的field key 
    show field keys
    -- 查看一个measurement中所有的保存策略(可以有多个,一个标识为default)
    show retention policies;
    
    b.新增用户
    
    --普通用户
    
    create user "user" with password 'user'
    
    --管理员用户
    
    create user "admin" with password 'admin' with all privileges
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    monitor 控制InfluxDB自有的监控系统。 默认情况下,InfluxDB把这些数据写入_internal 数据库,如果这个库不存在则自动创建。 _internal 库默认的retention策略是7天,如果你想使用一个自己的retention策略,需要自己创建

    设置保留策略为30天
    create retention policy “test_retention” on “test” duration 30d replication 1 default
    在这里插入图片描述
    保留策略设置
    设置保留策略语法参考

    4.参考资料
    influxQL语法文档

    influxdb 安装包下载方式

    用c#写入数据到influxDB中
    influxDB-c#开发包

    influx2.+系列c# 开发包

    实际测试中,一次传入17634个点到写入方法例如:influxDb.Client.WriteAsync(dataLst, dbName);
    在本机运行时,只成功写入5717条。

    查看influxdb 官方文档:

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

    influxdb 2.4 doc
    influxdb中文文档

    写入数据到influxDB时间戳只能使用Utc格式

    DateTime转Utc格式:

                DateTimeFormatInfo dtFormat = new DateTimeFormatInfo();
                dtFormat.ShortDatePattern = "yyyy/MM/dd HH:mm:ss.fff";//
                DateTime date = Convert.ToDateTime(SubmitTime, dtFormat);
                return TimeZoneInfo.ConvertTimeToUtc(date, TimeZoneInfo.Local);
    
    • 1
    • 2
    • 3
    • 4
    1. 连续查询。在实际开发项目中需要把前一天的数据批量写入influxDB中,并使用连续查询统计需要的指标。然而,依据官方文档描述,influxDB的连续查询语句不支持 WHERE子句的查询条件中指定时间范围。
      连续查询
    注意:InfluxDB在执行连续查询语句时,会根据time(interval) 的值自动生成查询时间范围。
    因此,用户在创建连续查询语句时,不需要在WHERE子句的查询条件中指定时间范围,
    且在WHERE条件中指定的时间范围都会被忽略掉
    
    • 1
    • 2
    • 3

    删除cq_query

    SHOW CONTINUOUS QUERIES---查看cq_query
    DROP CONTINUOUS QUERY <cq_name> ON <database_name>--删除cq_query
    
    • 1
    • 2

    influxdb 如何在where子句中指定时间

    • 使用RFC3339时间格式的字符串指定时间范围,时间要加单引号。
    > SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' 
     AND time >= '2015-08-18T00:00:00.000000000Z' AND time <= '2015-08-18T00:12:00Z'
    
    name: h2o_feet
    time                   water_level
    ----                   -----------
    2015-08-18T00:00:00Z   2.064
    2015-08-18T00:06:00Z   2.116
    2015-08-18T00:12:00Z   2.028
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    或者如下

    > SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' 
      AND time >= '2015-08-18' AND time <= '2015-08-18 00:12:00'
    
    name: h2o_feet
    time                   water_level
    ----                   -----------
    2015-08-18T00:00:00Z   2.064
    2015-08-18T00:06:00Z   2.116
    2015-08-18T00:12:00Z   2.028
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意: 使用‘+’ 运算时间,‘+’ 与6m 中的空格不能省略

    > SELECT "water_level" FROM "h2o_feet" WHERE time > '2015-09-18T21:24:00Z' + 6m
    
    name: h2o_feet
    time                   water_level
    ----                   -----------
    2015-09-18T21:36:00Z   5.066
    2015-09-18T21:42:00Z   4.938
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    > select  count(*)  from Scann9 where time>'2022-09-16T10:10:00Z'+ 10m
    name: Scann9
    time                           count_Freq
    ----                           ----------
    2022-09-16T10:20:00.000000001Z 9669
    
    • 1
    • 2
    • 3
    • 4
    • 5

    相对时间设置

    SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='santa_monica' 
    AND time >= '2015-09-18T21:30:00Z' AND time <= now() + 180w 
    GROUP BY time(12m) fill(none)
    
    name: h2o_feet
    time                   mean
    ----                   ----
    2015-09-18T21:24:00Z   5.01
    2015-09-18T21:36:00Z   5.002
    2020-04-16T22:00:00Z   3.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    其他参考influxdb

    INTO 子句使用方法
    into 子句使用时,tags 自动转为field

    在这里插入图片描述

  • 相关阅读:
    【电机控制】PMSM无感foc控制(二)PID控制(附大厂C源码)
    PIL如何批量给图片添加文字水印?
    Redis高可用架构—Redis集群(Redis Cluster)详细介绍
    计算机毕业设计(附源码)python疫情社区管理系统
    批处理的应用
    HTML 13 HTML a 标签
    【jmeter录制浏览器上特定的单个请求】
    1-2搭建Kali Linux环境
    mybatis查询text类型字段时返回Nclob,导致json格式化时报错
    Redis
  • 原文地址:https://blog.csdn.net/sophiemantela/article/details/127261537