暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于influxDB

简墨汇 2022-07-26
1987
InfluxDB是一个时间序列数据库,旨在处理较高的写入和查询负载。它是TICK堆栈的组成部分 。InfluxDB旨在用作涉及大量时间戳数据的任何用例的后备存储,包括DevOps监控,应用程序指标,IoT传感器数据和实时分析。
  • 特点

GO语言编写,无其他依赖项
专为时间序列数据编写的定制高性能数据存储。TSM引擎可实现高摄取速度和数据压缩
无结构,列式存储,可动态扩展列
支持一系列的聚合函数
支持HTTP API访问


注意 InfluxDB 2.0 版本新增了org 和 bucket的概念,认证使用 token 而不是用户名密码方式,语法采用 Flux 而不是之前的类 SQL 方式。

InfluxDB2.0 OSS(Object Storage Service,简称OSS)时序平台建立的目的是为了收集、存储、处理和可视化性能和信息。

  • 安装 InfluxDB

解压文件到该目录下 C:\Program Files\InfluxDB\,并且可以根据你自己的需要改名
默认情况下,InfluxDB使用TCP端口8086通过InfluxDB HTTP API进行客户机-服务器通信。
  • 启动 InfluxDB

使用cmd打开influxd.exe

注:使用influxd --reporting-disabled命令可关闭信息反馈

taskkill f t im influxd.exe  关闭程序

  • UI界面设置InfluxDB

浏览器访问localhost:8086

点击Get Started
  • 设置初始化用户

  1. 输入初始化用户的用户名

  2. 给你的初始化用户赋密码

  3. 输入你的初始化Org名

  4. 输入你的初始化Bucket名字

  5. 点击继续

注:Bucket相当于库的概念,是用来存储你的时序数据的地方。每个的Bucket都有自己的保留策略(比如数据保留几天,这样的一个时间点概念)

  • 插入数据

从UI里面获取以下信息

organization – See View organizations for instructions on viewing your organization ID.

Bucket – See View buckets for instructions on viewing your bucket ID.

API token – See View tokens for instructions on viewing your API token.

InfluxDB URL – See InfluxDB URLs.

使用约定的格式去录入数据,每行代表一个数据点. 每个数据点都需要一个measurement 和 field可能还需要tag和时间戳。

注:

measurement相当于table

filed相当于属性

tag相当于索引

data point: 数据点,相当于关系型数据库中的row

  • Java Demo

引入依赖
    <dependency>
    <groupId>com.influxdb</groupId>
    <artifactId>influxdb-client-java</artifactId>
    <version>3.3.0</version>
    </dependency>

    InfluxDB2Example
      package example;


      import java.time.Instant;
      import java.util.List;
      import com.influxdb.annotations.Column;
      import com.influxdb.annotations.Measurement;
      import com.influxdb.client.InfluxDBClient;
      import com.influxdb.client.InfluxDBClientFactory;
      import com.influxdb.client.WriteApiBlocking;
      import com.influxdb.client.domain.WritePrecision;
      import com.influxdb.client.write.Point;
      import com.influxdb.query.FluxRecord;
      import com.influxdb.query.FluxTable;


      public class InfluxDB2Example {


          public static void main(final String[] args) {
              // You can generate an API token from the "API Tokens Tab" in the UI
              String token = "mewoGaqs7zFmrd5mnaXTuIAVc0QGPXXXX==";
              String bucket = "buck";
      String org = "orgName";


              InfluxDBClient client = InfluxDBClientFactory.create("http://localhost:8086", token.toCharArray());
              //InfluxDBClient influxDBClient = InfluxDBClientFactory.create("http://localhost:8086", token.toCharArray(), org, bucket);
      //writeApi.writeMeasurement(WritePrecision.NS, temperature);


              //写入数据
              //Option 1: Use InfluxDB Line Protocol to write data
            /* String data = "mem,host=host1 used_percent=23.43234543";
              WriteApiBlocking writeApi = client.getWriteApiBlocking();
              writeApi.writeRecord(bucket, org, WritePrecision.NS, data);
              System.out.println("写入成功");*/
              //Option 2: Use a Data Point to write data  推荐使用
              Point point = Point.measurement("temperature")
                      .addTag("location""west")
                      .addField("value", 55D)
                      .time(Instant.now(), WritePrecision.NS);
              //WriteOptions writeOptions = WriteOptions.builder()
                //    .batchSize(5000)
                //    .flushInterval(1000)
                //    .bufferLimit(10000)
                //    .jitterInterval(1000)
                //    .retryInterval(5000)
                //    .build();
              //WriteApi writeApi=client.getWriteApi(writeOptions);
              WriteApiBlocking writeApi = client.getWriteApiBlocking();
              writeApi.writePoint(bucket, org, point);
              System.out.println("写入成功");
              //Option 3: Use POJO and corresponding class to write data
              /*Temperature temperature = new Temperature();
              temperature.location = "west";
              temperature.value = 77D;
              temperature.value2=123D;
              temperature.mytime = Instant.now();
              WriteApiBlocking writeApi = client.getWriteApiBlocking();
              writeApi.writeMeasurement(bucket, org, WritePrecision.NS, temperature);
      System.out.println("写入成功");*/


              //查询数据
              /**
              * 查询语法说明
              * 1、bucket 桶
              * 2、range 指定起始时间段
              *    range有两个参数start,stop,stop不设置默认为当前。
              *    range可以是相对的(使用负持续时间)或绝对(使用时间段)
              * 3、filter 过滤条件查询 _measurement 表  _field 字段
              * 4、yield()函数作为查询结果输出过滤的tables。
              */
              //String query = "from(bucket: \"eiss\") |> range(start: -3h)";
              /*String query = "from(bucket: \"eiss\") |> range(start:2022-07-26T02:25:19.060Z, stop:2022-07-26T08:25:19.060Z)" +" |> filter(fn: (r) => r[\"_measurement\"] == \"temperature\")" +" |> filter(fn: (r) => r[\"_field\"] == \"value2\")";
              List<FluxTable> tables =client.getQueryApi().query(query,org);
              for (FluxTable table : tables) {
                  for (FluxRecord record : table.getRecords()) {
                      if("temperature".equals(record.getMeasurement())){
                          System.out.println(record.getMeasurement());//temperature
                          System.out.println(record.getField());//value2
                          System.out.println(record.getTable());//1
                          System.out.println(record.getValue());//222.0
                          System.out.println(record.getStart());//2022-07-26T02:25:19.060Z
                          System.out.println(record.getStop());//2022-07-26T08:25:19.060Z
                          System.out.println(record);//FluxRecord[table=1, values=9]
                      }
                  }
              }*/
              //释放资源
              client.close();
      }


          @Measurement(name = "temperature")
          private static class Temperature {
              @Column(tag = true)
              String location;
              @Column
              Double value;
              @Column
              Double value2;
              @Column(timestamp = true)
              Instant mytime;
          }
      }

      • UI界面查询数据

      •   关于flux-dsl

        <dependency>
        <groupId>com.influxdb</groupId>
        <artifactId>flux-dsl</artifactId>
        <version>4.2.0</version>
        </dependency>

        具体函数见https://github.com/influxdata/influxdb-client-java/tree/master/flux-dsl


        文章转载自简墨汇,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论