TimescaleDB 스키마 관리
TimescaleDB 스키마 관리 (Schema Management)
시계열 데이터의 성능과 확장성을 좌우하는 핵심은 스키마 설계예요. TimescaleDB는 PostgreSQL 위에서 동작하기 때문에, 표준 PostgreSQL 스키마 도구(마이그레이션, 인덱스, 데이터 타입)를 그대로 쓰면서 시계열에 유리한 설계를 적용할 수 있어요.
올바른 스키마 설계는 저장 효율과 쿼리 속도에 직접적인 영향을 줘요. 특히 인덱스 설계와 데이터 타입 선택이 중요해요.
출처: https://docs.timescale.com/use-timescale/latest/schema-management/
시계열 데이터 모델링 원칙
- 시간 컬럼을 항상 포함해요. 하이퍼테이블의 파티셔닝 기준이 되고, 모든 시계열 쿼리가 시간을 사용하기 때문이에요.
- 시간 컬럼은
TIMESTAMPTZ를 권장해요. 시간대 오류를 피할 수 있어요. - 조회에 자주 쓰는 태그/엔티티 컬럼(예:
device_id,sensor_id)을 별도 컬럼으로 관리해요. - 측정값(metrics)과 메타데이터(metadata/태그)를 구분해서 모델링해요.
인덱스 설계
- 하이퍼테이블은 기본 인덱스가 자동으로 생성돼요.
- 조회 패턴이 명확하면 복합 인덱스(composite index) 를 써요. 예: 시간 + 기기 ID.
- 카디널리티가 낮은 값은 부분 인덱스(partial index)로 효율화할 수 있어요.
- 과도한 인덱스는 삽입 성능을 떨어뜨리므로, 실제 쿼리 패턴에 맞춰 최소한으로 설계해요.
데이터 타입 선택
- 고정 소수점 정밀도가 필요하면
NUMERIC/DECIMAL, 부동소수점은DOUBLE PRECISION. - 압축률을 높이려면 가능한 한 작은 정수 타입(
SMALLINT,INTEGER)을 써요. - 태그 값은
TEXT또는 카디널리티가 낮으면ENUM형을 고려해요.
마이그레이션
TimescaleDB는 PostgreSQL 스키마 마이그레이션 도구(Schema Migrations, Flyway, Liquibase 등)와 호환돼요. ALTER TABLE 문으로 스키마를 안전하게 변경할 수 있어요. 대규모 스키마 변경은 배치로 나눠서 진행하는 게 좋아요.