InfluxDB : Java를 사용하여 데이터 쓰기 및 쿼리 작업 수행 (버전 1.8.4)

1. 진술

현재 내용은 주로 Java를 사용하여 구현하고 InfluxDB를 사용하여 데이터를 추가하고 데이터 작업을 쿼리하는 것입니다.

  1. FluxClient 모드, 구성 파일에서 켜야 함
  2. InfluxDBClient 방식

2. 기본 pom 종속성

<dependency>
	<groupId>com.influxdb</groupId>
	<artifactId>influxdb-client-java</artifactId>
	<version>1.7.0</version>
</dependency>
<dependency>
	<groupId>com.influxdb</groupId>
	<artifactId>influxdb-client-flux</artifactId>
	<version>1.8.0</version>
</dependency>

위는 InfluxDBClient 패키지이고 다른 하나는 FluxClient 패키지이지만 FluxClient 패키지는 InfluxDBClient 패키지에 따라 다릅니다.

3. InfluxDB의 Flux 기능 켜기

1. 구성 파일 수정 : 위치etc/influxdb/influxdb.conf文件

여기에 사진 설명 삽입
주로 데이터 저장 주소 수정

여기에 사진 설명 삽입
플럭스 기능 활성화

2. 시작시 구성 파일을로드합니다.

./influxd  -config /home/hy/influxdb-1.8.4-1/etc/influxdb/influxdb.conf

이때 구성 파일이 사용되며 그렇지 않으면 기본 구성이 사용됩니다!

4. Java를 사용하여 액세스

1. FluxClient 방식으로 쿼리 수행 (쿼리 작업 만 수행 가능)

/**
	 * 
	 * @author hy
	 * @createTime 2021-03-14 11:59:48
	 * @description 使用Flux方式查询数据
	 *
	 */
	public static void queryExampleUsingFluxClient() {
    
    
		FluxClient fluxClient = FluxClientFactory.create("http://192.168.1.101:8086/");
		Boolean ping = fluxClient.ping();
		System.out.println("是否可以连接InfluxDb:" + ping);
		//
		// Flux
		//
		String flux = "from(bucket: \"mydb\") " // bucket就代表当前的influxdb1.8中的database
				+ " |> range(start: -3h, stop: 3h) " // 必须要有起始时间和结束时间
				+ " |> filter(fn: (r) => r[\"_measurement\"] == \"treasures\")"; // _measurement 表示当前的series
		/*
		 * String flux = String.format("from(bucket: \"%s\") " +
		 * " |> range(start: -3h, stop: 3h) " +
		 * " |> filter(fn: (r) => r[\"_measurement\"] == \"%s\") ", "mydb", "mem");
		 */
		// String flux ="chunked=true&db=mydb&epoch=ns&q=select * from treasures";
		//
		// Synchronous query
		//
		List<FluxTable> tables = fluxClient.query(flux);
		System.out.println("开始显示数据===============>");
		System.out.println("time : captain_id : value");
		for (FluxTable fluxTable : tables) {
    
    
			List<FluxRecord> records = fluxTable.getRecords(); // 获取实际的记录操作
			// List<FluxColumn> columns = fluxTable.getColumns(); // 获取返回的列
			// System.out.println(columns); // 下面的数据显示是按照当前的column中的label名称获取的数据
			// System.out.println(records);

			for (FluxRecord fluxRecord : records) {
    
    
				System.out.println(fluxRecord.getTime() + ": " + fluxRecord.getValueByKey("captain_id") + ":"
						+ fluxRecord.getValueByKey("_value"));
			}

		}
		System.out.println("开始显示数据<===============");
		//
		// Asynchronous query 。一个异步操作请求
		//
		/*
		 * fluxClient.query(flux, (cancellable, record) -> {
		 * 
		 * // process the flux query result record System.out.println(record.getTime() +
		 * ": " + record.getValue());
		 * 
		 * }, error -> {
		 * 
		 * // error handling while processing result
		 * System.out.println("Error occurred: " + error.getMessage());
		 * 
		 * }, () -> {
		 * 
		 * // on complete System.out.println("Query completed"); });
		 */

		fluxClient.close();
	}

InfluxDBClient 메서드 사용 (데이터 작업을 작성하거나 쿼리 작업을 수행 할 수 있음)

/**
	 * 
	 * @author hy
	 * @createTime 2021-03-14 12:00:16
	 * @description 使用官方推荐的方式查询
	 *
	 */
	public static void queryExampleUseingInfluxDBClient() {
    
    
		String database = "mydb";
		String retentionPolicy = "autogen";

		// 1.打开客户端
		InfluxDBClient client = InfluxDBClientFactory.createV1("http://192.168.1.101:8086", "root",
				"root".toCharArray(), database, retentionPolicy);
		

		System.out.println("*** Write Points ***");
		
		// 2.创建写入api
		try (WriteApi writeApi = client.getWriteApi()) {
    
    
			
			Point point = Point.measurement("treasures").addTag("captain_id", "crunch").addField("value", 19.5f);

			System.out.println(point.toLineProtocol());
			// 执行写入数据操作
			writeApi.writePoint(point);
		}
		
		// 开始执行查询操作
		System.out.println("*** Query Points ***");
		String query = String.format("from(bucket: \"%s\") " // bucket就代表当前的influxdb1.8中的database
				+ " |> range(start: -3h, stop: 3h) " // 必须要有起始时间和结束时间
				+ " |> filter(fn: (r) => r[\"_measurement\"] == \"%s\")",database,"treasures"); // _measurement 表示当前的series
		List<FluxTable> tables = client.getQueryApi().query(query);
		tables.get(0).getRecords().forEach(record -> System.out.println(String.format("%s %s: %s %s", record.getTime(),
				record.getMeasurement(), record.getField(), record.getValue())));

		client.close();
	}

결과는 성공적이었습니다! ,노트官方中influxdb-client-flux没有2.0.0版本!

추천

출처blog.csdn.net/weixin_45492007/article/details/114781563