시계열 데이터베이스란?
시계열 데이터베이스(TSDB)는 주로 시간으로 인덱싱되는 데이터의 저장과 쿼리에 최적화되어 있습니다. 관계형 데이터베이스와 달리 대부분의 쿼리가 타임스탬프 기반 범위 쿼리임을 가정하고, 시간 순서의 규칙적 특성을 활용하는 압축 기법을 사용합니다.
주요 특징
- 쓰기 집약적 워크로드: 초당 수백만 데이터 포인트 (센서 데이터, 메트릭)
- 시간 범위 쿼리: "지난 5분간 평균 CPU" 같은 쿼리에 특화
- 자동 보존 정책: 오래된 데이터를 자동으로 다운샘플링하고 삭제
- 압축: 시간 순서 데이터는 델타 인코딩으로 매우 잘 압축됨
주요 시계열 데이터베이스
InfluxDB
# 라인 프로토콜
cpu_usage,host=server01 value=78.5 1700000000000000000
# Flux 쿼리 — 지난 5분 평균 CPU
from(bucket: "metrics")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "cpu_usage")
|> mean()
TimescaleDB
-- 하이퍼테이블 생성 (시간 기반 자동 파티셔닝)
SELECT create_hypertable('sensor_readings', 'time');
-- 일반 SQL로 시간 범위 쿼리
SELECT time_bucket('5 minutes', time) AS bucket,
avg(temperature) AS avg_temp
FROM sensor_readings
WHERE time > NOW() - INTERVAL '1 hour'
GROUP BY bucket
ORDER BY bucket;
Prometheus
# HTTP 요청 5분 비율
rate(http_requests_total{status="200"}[5m])
# 경고 규칙
- alert: HighErrorRate
expr: rate(http_errors_total[5m]) > 0.1
for: 2m
TSDB vs PostgreSQL 선택 기준
- 서버 메트릭, IoT, 모니터링 → InfluxDB / Prometheus
- 기존 Postgres 앱의 시간 순서 이벤트 → TimescaleDB
- 일반 앱의 시간 쿼리 → PostgreSQL TIMESTAMPTZ