일전에 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 사용법을 정리해보겠다.
연동방법은 정말 간단하다.
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"
}
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);
String fluxQuery = "influxQL 작성";
QueryApi queryApi = influxDBClient.getQueryApi();
List<FluxTable> tables = queryApi.query(fluxQuery);
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조회 방법에 대해 알아보았다.