[springBoot] influxDB 연동

22_gas·2024년 6월 21일

개요

일전에 flask로 influxDB 조회를 테스트 했었는데 

python influxDB-client 조회 속도가 만족스럽지 못하여 spring boot로 테스트 하게 되었다.

조회기간 : 특정일(YYYY-MM-DD) 의 00:00:00 ~ 23:59:59 데이터

개발PC - influxDB
python으로는 28초가 걸린다.
spring으로는 15초가 걸리고 

influxDB 서버에 배포 후 테스트
python: 26초
spring: 4초
nodeJS도 개발PC에서 15초 정도 나오고 실운영에서 10초 이내의 조회결과 성능을 보여준다.

테스트는 이만 하고 spring boot로 influx 사용법을 정리해보겠다.

연동방법은 정말 간단하다.

연동

1.dependency 추가

pom.xml

<dependency>
    <groupId>com.influxdb</groupId>
    <artifactId>influxdb-client-java</artifactId>
    <version>6.10.0</version>
</dependency>

gradle

dependencies {
    implementation "com.influxdb:influxdb-client-java:6.10.0"
}

2.접속

url, token, org, bucket 이렇게 정보가 필요하다.

char[] token = "당신의 token값".toCharArray();
String org = "당신의 organization 명";
String bucket = "당신의 bucket 명";
String url = "http://xx.xx.xx.xx:8086";

InfluxDBClient influxDBClient = InfluxDBClientFactory.create(url, token, org, bucket);

3. 쿼리 실행

String fluxQuery = "influxQL 작성";
QueryApi queryApi = influxDBClient.getQueryApi();
List<FluxTable> tables = queryApi.query(fluxQuery);

4. 결과 데이터 핸들링

 List<Map<String, Object>> _result = new ArrayList<>();
for (FluxTable fluxTable : tables) {
    List<FluxRecord> records = fluxTable.getRecords();
    for (FluxRecord fluxRecord : records) {
        Map<String, Object> _tempMap = new HashMap<>();
        // 시간, 결과값 -> {x: 시간, y: 결과} 형태의 배열로 만들어준다.
        _tempMap.put("x", fluxRecord.getTime());
        _tempMap.put("y", fluxRecord.getValueByKey("_value"));
        _result.add(_tempMap);
    }
}//for end
influxDBClient.close();

이상 간단하게 influxDB조회 방법에 대해 알아보았다.

profile
전 아직 모르는게 많아요

0개의 댓글