시계열 데이터베이스(TSDB, Time Series Database)는 타임스탬프 기반의 순차적 데이터를 효율적으로 저장·조회하도록 최적화된 데이터베이스다. 서버 메트릭, IoT 센서, 금융 데이터, 로그 등 시간 순서가 중요한 데이터에 특화됐다.
시계열 데이터 특성
시계열 데이터 패턴:
timestamp cpu_usage memory_gb request_count
2024-01-01 00:00:00 45.2% 7.8 GB 1234
2024-01-01 00:00:10 47.1% 7.9 GB 1256
2024-01-01 00:00:20 43.8% 7.8 GB 1198
...
특성:
- 추가(INSERT) 위주, 업데이트/삭제 드묾
- 최신 데이터 쿼리 빈도 높음
- 범위 쿼리 (특정 기간) 많음
- 높은 쓰기 처리량 (초당 수백만 포인트)
- 시간이 지날수록 정밀도 낮춰 압축 가능
주요 TSDB 비교
| 데이터베이스 | 특징 | 주요 사용처 |
|---|
| InfluxDB | SQL 유사 Flux 쿼리, 풀스택 | 인프라 모니터링 |
| TimescaleDB | PostgreSQL 확장, 하이퍼테이블 | 기존 SQL 팀 |
| Prometheus | Pull 방식, PromQL, 알림 통합 | Kubernetes 모니터링 |
| VictoriaMetrics | 고성능, Prometheus 호환 | 대규모 메트릭 |
| ClickHouse | 컬럼 스토리지, OLAP | 분석, 로그 |
InfluxDB 예시
-- InfluxDB Line Protocol (데이터 입력 형식)
measurement,tag_key=tag_value field_key=field_value timestamp
cpu,host=server01,region=us-east cpu_usage=45.2,memory=7.8 1704067200000000000
-- Flux 쿼리 (최근 1시간 평균 CPU)
from(bucket: "metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu" and r.host == "server01")
|> filter(fn: (r) => r._field == "cpu_usage")
|> aggregateWindow(every: 5m, fn: mean)
TimescaleDB (PostgreSQL 기반)
sql
-- 하이퍼테이블 생성 (자동 파티셔닝)
SELECT create_hypertable('metrics', 'timestamp');
-- 자동 압축 정책 (30일 이후 데이터 압축)
SELECT add_compression_policy('metrics', INTERVAL '30 days');
-- 자동 삭제 정책 (90일 보관)
SELECT add_retention_policy('metrics', INTERVAL '90 days');
-- 연속 집계 (Continuous Aggregate)
CREATE MATERIALIZED VIEW hourly_avg
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 hour', timestamp) AS hour,
host, AVG(cpu_usage) AS avg_cpu
FROM metrics GROUP BY hour, host;
데이터 압축 비율
시계열 데이터는 인접 값이 유사하여 압축률이 매우 높다.
| 압축 방식 | 비율 | 원리 |
|---|
| Delta 인코딩 | 5-10x | 타임스탬프 차분 |
| XOR 인코딩 | 10-20x | 부동소수점 차분 (Gorilla) |
| 컬럼 압축 | 총 30-50x | 같은 컬럼의 유사값 |
관련 개념