시계열 데이터란 무엇인가?
- 시계열 데이터는 각 데이터 포인트에 타임스탬프가 붙어 있는 데이터의 모음임
- 예시: 주식 가격, 기기 및 센서에서 반환된 온도 및 가용성 데이터, 웹사이트의 트래픽 데이터
- 시계열 작업은 일반적으로 시간 필터링 쿼리와 데이터 요약을 위한 집계 쿼리를 포함함
PostgreSQL을 사용한 시계열 작업
- PostgreSQL은 확장성과 생태계 도구 덕분에 모든 데이터 작업을 처리할 수 있음
- Tembo는 사용자가 PostgreSQL 생태계를 쉽게 사용할 수 있도록 목표를 설정함
- 고객의 가장 큰 요구는 시계열 데이터를 저장하고 처리할 수 있는 스택이었음
pg_timeseries의 구성 요소
- 시계열 데이터를 효율적으로 저장하고 쿼리하기 위한 요구 사항:
- 시계열 데이터 쉽게 관리
- 높은 처리량 처리
- 범위 쿼리 빠르게 응답
- 대량 데이터 효율적으로 저장
- 복잡한 분석 함수 실행
- PostgreSQL의 기본 기능:
- 네이티브 파티셔닝, 다양한 인덱스, 물리화된 뷰, 윈도우/분석 함수
- 추가 확장 기능:
- pg_partman: 파티션 관리
- pg_cron: 작업 스케줄링
- columnar: 압축
- pg_ivm: 증분 물리화된 뷰
- pg_tier: 오래된 파티션의 장기 오프로드
pg_timeseries: PostgreSQL에서 시계열 데이터를 관리하는 가장 간단한 방법
- pg_timeseries는 여러 확장의 기능을 결합하여 통합된 인터페이스 제공
- 시작하기 위해서는 시간과 관련된 열로 파티셔닝된 테이블이 필요함
CREATE TABLE measurements ( metric_name text, metric_value numeric, metric_time timestamptz NOT NULL ) PARTITION BY RANGE (metric_time); SELECT enable_ts_table('measurements');
- 중요한 정보 제공을 위한 다양한 뷰 포함:
SELECT table_id, table_size_bytes FROM ts_table_info; SELECT * FROM ts_part_info;
- 파티션의 압축 및 삭제 정책 설정 가능:
SELECT set_ts_compression_policy('measurements', '90 days'); SELECT set_ts_retention_policy('measurements', '365 days');
- 추가 함수 제공:
SELECT locf(avg(metric_value)) OVER (ORDER BY metric_time) avg_val, last(metric_name, metric_value) highest, metric_time FROM date_bin_table(NULL::measurements, '1 hour', '[2024-05-09,2024-06-07]');
우리는 이제 시작 단계임
- PostgreSQL용 시계열 확장을 구축하기 위해 많은 구성 요소가 필요함
- 커뮤니티와 함께 공개적으로 구축할 계획
- 현재 로드맵:
- 오래된 파티션을 S3와 같은 콜드 스토리지로 오프로드
- 효율적인 분석을 위한 근사 함수
- 증분 물리화된 뷰
- 오래된 파티션의 롤업 및 롤오프
- 추가 분석 도우미 함수
- GitHub README에 전체 로드맵이 있으며 사용자 수요에 따라 기능 우선순위 결정
GN⁺의 의견
- 시계열 데이터의 중요성: IoT, 금융, 웹 분석 등 다양한 분야에서 시계열 데이터의 중요성이 증가하고 있음. pg_timeseries는 이러한 데이터를 효율적으로 관리할 수 있는 도구를 제공함.
- PostgreSQL의 확장성: PostgreSQL의 확장 기능을 활용하여 다양한 데이터 작업을 처리할 수 있음. pg_timeseries는 이러한 확장 기능을 통합하여 사용자의 편의성을 높임.
- 커뮤니티와의 협력: 오픈소스로 개발되어 커뮤니티의 피드백을 반영할 수 있음. 이는 기능 개선과 버그 수정에 큰 도움이 됨.
- 경쟁 제품: TimescaleDB와 같은 다른 시계열 데이터베이스와 비교했을 때, 라이선스 제한 없이 사용할 수 있는 장점이 있음. 그러나 성능과 기능 면에서 비교 검토가 필요함.
- 도입 고려 사항: pg_timeseries를 도입할 때는 기존 데이터베이스와의 호환성, 성능, 유지보수 비용 등을 고려해야 함. 또한, 시계열 데이터의 특성상 데이터 양이 급증할 수 있으므로 적절한 스토리지 관리가 필요함.
Hacker News 의견
해커뉴스 댓글 모음 요약
-
Incremental Materialized Views
- Incremental materialized views가 핵심 기능으로, 데이터가 들어올 때마다 성능 저하 없이 최신 상태를 유지할 수 있음.
- pg_ivm 같은 구현을 사용할지, 자체적으로 구현할지 궁금함.
- 언젠가 PostgreSQL 코어에 ivm이 포함되기를 희망함.
-
TimescaleDB와의 비교
- TimescaleDB의 라이선스 제한으로 인해 압축, 증분 물질화 뷰, 무한 저장소 등의 기능을 사용할 수 없음.
- 이러한 기능이 없으면 고객의 시계열 데이터 요구를 충족할 수 없다고 판단하여 PostgreSQL 라이선스 확장을 직접 구축함.
- 무료 버전의 TimescaleDB를 사용해 5억 개의 관측 데이터베이스를 샤딩한 경험이 있음. 큰 문제 없이 작동했음.
- 벤치마크와 비교 결과가 있었으면 좋겠음. 계속 지켜볼 예정임.
-
Append-Only 테이블
- PostgreSQL과 다른 데이터베이스에 네이티브 append-only 테이블이 추가될 때가 됐음.
- 이는 시계열 데이터베이스는 아니지만 표준화와 관련된 논리/접근에 도움이 될 것임.
-
시계열 데이터베이스의 진화
- 시계열 데이터베이스가 다음과 같이 진화하고 있음:
- 컬럼형 저장소 및 Parquet와 Arrow 같은 오픈 포맷으로의 수렴: InfluxDB 3.0, QuestDB
- PostgreSQL 위에 시계열 기능 추가: Timescale, pg_timeseries
- Prometheus 생태계를 중심으로 한 관측 플랫폼: Grafana, Victoria Metrics, Chronosphere
- 시계열 데이터베이스가 다음과 같이 진화하고 있음:
-
컬럼형 저장소의 필요성
- 대부분의 시계열 쿼리는 집계 쿼리임.
- 이를 위해 최상급 컬럼형 저장소를 활용하거나 구축하는 것이 좋음.
- ClickHouse 같은 제품이 PostgreSQL에 왜 없는지 의문임.
-
유용한 링크
- 트렁크와 pgt.dev에 대해 알게 되어 감사함.
-
로드 밸런서 로그 엔트리
- 로드 밸런서 로그 엔트리(상태, 응답 본문, 헤더 등)를 처리할 때 이 확장이 유용할지 궁금함.
- 컬럼형 데이터베이스 저장소가 일반적인 행 기반 데이터베이스보다 더 효율적일 것 같음.
- 로드 밸런서 로그 엔트리는 분석 이벤트와 유사하게 간주될 수 있음.
-
오픈 소스 혁신
- PostgreSQL은 항상 오픈 소스였고, 매우 자유로운 오픈 소스 라이브러리를 사용해 왔음.
- 복제부터 시계열 지원까지 다양한 독점 및 소스 사용 가능 확장이 있었음.
- 이제 이러한 독점 확장이 적절한 오픈 소스에 의해 방해받고 있음.
-
PostgreSQL 라이선스
- PostgreSQL 라이선스를 사용하는 것은 좋은 결정임.
-
사이트 디자인 및 앱 UI
- 사이트 디자인이 잘 되어 있고 읽기 쉬움.
- 앱 UI도 데모 사진에서 훌륭해 보임. 시도해 볼 의향이 있음.