6P by neo 4달전 | favorite | 댓글 1개

시계열 데이터란 무엇인가?

  • 시계열 데이터는 각 데이터 포인트에 타임스탬프가 붙어 있는 데이터의 모음임
  • 예시: 주식 가격, 기기 및 센서에서 반환된 온도 및 가용성 데이터, 웹사이트의 트래픽 데이터
  • 시계열 작업은 일반적으로 시간 필터링 쿼리와 데이터 요약을 위한 집계 쿼리를 포함함

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도 데모 사진에서 훌륭해 보임. 시도해 볼 의향이 있음.