# pg_timeseries: PostgreSQL용 오픈소스 시계열 확장 기능

> Clean Markdown view of GeekNews topic #14927. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14927](https://news.hada.io/topic?id=14927)
- GeekNews Markdown: [https://news.hada.io/topic/14927.md](https://news.hada.io/topic/14927.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-21T21:34:28+09:00
- Updated: 2024-05-21T21:34:28+09:00
- Original source: [tembo.io](https://tembo.io/blog/pg-timeseries)
- Points: 6
- Comments: 1

## Topic Body

### 시계열 데이터란 무엇인가?  
- 시계열 데이터는 각 데이터 포인트에 타임스탬프가 붙어 있는 데이터의 모음임  
- 예시: 주식 가격, 기기 및 센서에서 반환된 온도 및 가용성 데이터, 웹사이트의 트래픽 데이터  
- 시계열 작업은 일반적으로 시간 필터링 쿼리와 데이터 요약을 위한 집계 쿼리를 포함함  
  
### PostgreSQL을 사용한 시계열 작업  
- PostgreSQL은 확장성과 생태계 도구 덕분에 모든 데이터 작업을 처리할 수 있음  
- Tembo는 사용자가 PostgreSQL 생태계를 쉽게 사용할 수 있도록 목표를 설정함  
- 고객의 가장 큰 요구는 시계열 데이터를 저장하고 처리할 수 있는 스택이었음  
  
### pg_timeseries의 구성 요소  
- 시계열 데이터를 효율적으로 저장하고 쿼리하기 위한 요구 사항:  
  - 시계열 데이터 쉽게 관리  
  - 높은 처리량 처리  
  - 범위 쿼리 빠르게 응답  
  - 대량 데이터 효율적으로 저장  
  - 복잡한 분석 함수 실행  
- PostgreSQL의 기본 기능:  
  - 네이티브 파티셔닝, 다양한 인덱스, 물리화된 뷰, 윈도우/분석 함수  
- 추가 확장 기능:  
  - pg_partman: 파티션 관리  
  - pg_cron: 작업 스케줄링  
  - columnar: 압축  
  - pg_ivm: 증분 물리화된 뷰  
  - pg_tier: 오래된 파티션의 장기 오프로드  
  
### pg_timeseries: PostgreSQL에서 시계열 데이터를 관리하는 가장 간단한 방법  
- pg_timeseries는 여러 확장의 기능을 결합하여 통합된 인터페이스 제공  
- 시작하기 위해서는 시간과 관련된 열로 파티셔닝된 테이블이 필요함  
  ```sql  
  CREATE TABLE measurements (  
    metric_name text,  
    metric_value numeric,  
    metric_time timestamptz NOT NULL  
  ) PARTITION BY RANGE (metric_time);  
  
  SELECT enable_ts_table('measurements');  
  ```  
- 중요한 정보 제공을 위한 다양한 뷰 포함:  
  ```sql  
  SELECT table_id, table_size_bytes FROM ts_table_info;  
  SELECT * FROM ts_part_info;  
  ```  
- 파티션의 압축 및 삭제 정책 설정 가능:  
  ```sql  
  SELECT set_ts_compression_policy('measurements', '90 days');  
  SELECT set_ts_retention_policy('measurements', '365 days');  
  ```  
- 추가 함수 제공:  
  ```sql  
  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를 도입할 때는 기존 데이터베이스와의 호환성, 성능, 유지보수 비용 등을 고려해야 함. 또한, 시계열 데이터의 특성상 데이터 양이 급증할 수 있으므로 적절한 스토리지 관리가 필요함.

## Comments



### Comment 25444

- Author: neo
- Created: 2024-05-21T21:34:29+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40417347) 
##### 해커뉴스 댓글 모음 요약

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