[시계열 데이터 (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를 통해 대량의 시계열 데이터를 효과적으로 관리하고, 이를 바탕으로 유용한 인사이트를 얻을 수 있습니다.
'개발정리 (nodeJS)' 카테고리의 다른 글
[nodeJS] Node.js와 Elasticsearch를 사용한 검색 기능 구현하기 (0) | 2024.09.13 |
---|---|
[nodeJS] Node.js로 PDF 생성 및 처리하기 (1) | 2024.09.09 |
[nodeJS] Node.js와 gRPC를 사용한 고성능 서비스 구축하기 (0) | 2024.08.26 |
[nodeJS] Node.js와 RabbitMQ를 사용한 메시지 큐 시스템 구축하기 (0) | 2024.08.14 |
[nodeJS] Node.js에서 TypeScript 사용하기 (0) | 2024.08.06 |