본문 바로가기
개발정리 (nodeJS)

[nodeJS] Node.js에서 시계열 데이터베이스 적용하기

by 할리갈리0 2024. 9. 3.

[시계열 데이터 (Time Series Data) ]

  • 시간 순서대로 수집된 데이터
  • 주로 금융 시장의 주가, 센서 데이터, 서버 로그, IoT 기기 데이터 등 시간에 따라 변하는 데이터에서 발생 
    • 타임스탬프: 데이터를 기록한 시점
    • 측정값: 시점에 기록된 데이터의 값
    • 태그: 데이터를 구분하거나 분류하기 위한 추가 정보

[시계열 데이터베이스 (Time Series Database, TSDB)]

  • 시계열 데이터를 효율적으로 저장하고 처리하기 위한 데이터베이스
    • 높은 쓰기 및 조회 성능: 대량의 데이터를 빠르게 기록하고 조회 가능
    • 압축 저장: 데이터 압축을 통해 저장 공간을 절약
    • 쿼리 최적화: 시계열 데이터를 위한 특화된 쿼리 기능을 제공

 

1. InfluxDB

InfluxDB는 시계열 데이터를 저장하고 처리하는 데 특화된 오픈 소스 데이터베이스. 높은 성능과 다양한 기능을 제공하여 시계열 데이터 처리를 효율적으로 수행 가능.

 

InfluxDB의 주요 특징

  • 고성능 데이터 처리: 초당 수백만 건의 데이터를 기록하고 조회 가능
  • Time Series 쿼리 언어: 시계열 데이터를 위한 SQL 유사 쿼리 언어인 InfluxQL 제공
  • 자동 다운샘플링 및 데이터 만료: 오래된 데이터를 자동으로 삭제하거나 요약하여 저장 공간 최적화
  • 태그 기반 데이터 모델: 태그를 사용하여 데이터를 효율적으로 쿼리하고 분석 가능

InfluxDB 사용 이유

  • 확장성: 클러스터링을 통해 확장 가능한 데이터 저장소 제공
  • 쉬운 설치 및 관리: 간단한 설치 및 관리가 가능하여 쉽게 시작 가능
  • 강력한 시각화 도구 통합: Grafana와 같은 시각화 도구와 통합하여 데이터를 시각적으로 분석 가능

2. Node.js 프로젝트에 InfluxDB 설정하기

프로젝트 초기화 및 InfluxDB 설치

Node.js 프로젝트를 초기화하고, InfluxDB를 사용하기 위한 패키지 설치
@influxdata/influxdb-client :  Node.js에서 InfluxDB와 상호작용하기 위한 클라이언트 라이브러리

mkdir influxdb-nodejs
cd influxdb-nodejs
npm init -y
npm install @influxdata/influxdb-client

 

InfluxDB 서버 설치 및 실행

InfluxDB 서버를 설치하고 실행 (InfluxDB 공식 사이트에서 운영체제에 맞는 설치 파일을 다운로드하여 설치)

influxd

 

InfluxDB에 데이터베이스 생성

InfluxDB CLI를 사용하여 데이터베이스 생성

influx
> CREATE DATABASE mydb
> USE mydb

 

3. InfluxDB에 시계열 데이터 저장하기

Node.js에서 데이터 쓰기

InfluxDB에 temperature라는 측정값을 저장하기 위해 Point 객체를 생성하여 태그와 필드를 설정하고, writeApi를 사용하여 데이터를 InfluxDB에 전송

// writeData.js
const { InfluxDB, Point } = require('@influxdata/influxdb-client');

// InfluxDB 연결 설정
const url = '<http://localhost:8086>';
const token = 'your-token';
const org = 'your-org';
const bucket = 'mydb';

const client = new InfluxDB({ url, token });

// Write API 생성
const writeApi = client.getWriteApi(org, bucket);

// 데이터 포인트 생성 및 전송
const point = new Point('temperature')
  .tag('location', 'office')
  .floatField('value', 23.5);

writeApi.writePoint(point);
writeApi.close().then(() => {
  console.log('Data written successfully');
}).catch(e => {
  console.error('Error writing data', e);
});

 

4. InfluxDB에서 시계열 데이터 조회하기

Node.js에서 데이터 읽기

InfluxDB에서 최근 1시간 동안의 temperature 데이터를 조회하고, 평균값을 계산하여 출력
fluxQuery를 사용하여 쿼리를 작성하고, queryApi를 통해 데이터를 조회

// readData.js
const { InfluxDB } = require('@influxdata/influxdb-client');

// InfluxDB 연결 설정
const url = '<http://localhost:8086>';
const token = 'your-token';
const org = 'your-org';
const queryApi = new InfluxDB({ url, token }).getQueryApi(org);

// 쿼리 작성 및 실행
const fluxQuery = `
  from(bucket: "mydb")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "temperature" && r.location == "office")
  |> mean()
`;

queryApi.queryRows(fluxQuery, {
  next: (row, tableMeta) => {
    const data = tableMeta.toObject(row);
    console.log(`${data._time}: ${data._value}`);
  },
  error: (error) => {
    console.error('Error querying data', error);
  },
  complete: () => {
    console.log('Query completed');
  }
});

 

 

이번 포스팅에서는 Node.js와 InfluxDB를 사용하여 시계열 데이터를 처리하는 방법을 살펴보았습니다. 시계열 데이터는 시간의 흐름에 따라 변화하는 데이터를 의미하며, InfluxDB는 이러한 데이터를 효율적으로 저장하고 조회하는 데 특화된 데이터베이스입니다. InfluxDB를 통해 대량의 시계열 데이터를 효과적으로 관리하고, 이를 바탕으로 유용한 인사이트를 얻을 수 있습니다.

반응형