본문 바로가기

DataBase

[TimescaleDB] TimescaleDB 동작 방식

Why?

  • 동작원리를 이해함으로써 추후 문제의 원인 파악보다 넓은 관점에서 해석 가능하다.

 

TimescaleDB?

PostgreSQL을 기반으로하는 오픈소스 시계열 데이터베이스이다. 시계열 데이터를 효율적으로 저장하고, 쿼리를 할 수 있는 기능을 담당한다. 현재의 많은 기업들의 비즈니스 모델이 시계열 데이터를 기반으로 하는 만큼 PostgreSQL 진영에서 많이 사용된다.

 

Hypertable

TimescaleDB는 시계열 데이터를 관리하기 위해서 "하이퍼 테이블"을 이용한다. 하이퍼 테이블은 데이터를 시간별로 자동으로 분할하는 PostgreSQL 테이블이다. 하이퍼 테이블의 장점은 일반 PostgreSQL 테이블과 동일한 방식으로 하이퍼 테이블과 상호 작용하지만, 시계열 데이터를 보다 빠르고, 쉽게 관리할 수 있다.

TimescaleDB의 특이한 장점은 특정 테이블만 Hypertable로 사용이 가능하고, 그 외의 관계형 데이터에는 일반 PostgreSQL 테이블을 사용할 수 있다.

동작원리

하이퍼 테이블 생성 시

우선 기존의 일반적인 PostgreSQL table을 Hypertable로 생성 가능하다.

SELECT create_hypertable('table1', 'created_at', migrate_data=>true);

 

TimescaleDB가 여러 Schema를 생성한다.

 

Hypertable로 만들게 되면, _timescaledb_internal에 변화가 생기게 되는데, _timescaledb_internal schema에 chunk 테이블을 생성한 것을 알 수 있다.

 

하이퍼테이블을 생성하면, 데이터가 시간별로 자동으로 분할된다. 각 하이퍼 테이블은 chunk라고 불리는 하위 테이블로 구성된다. 각 chunk는 시간 범위가 할당되고, 해당 범위의 데이터만 포함하게 된다.

 

TimescaleDB는 기본적으로 청크가 나뉘는 기간을 7일로 설정한다.

또한, TimescaleDB는 모든 하이퍼 테이블에 인텍스를 자동으로 설정하는데, 시간에 대한 내림차순 인덱스, 그리고 이 글에서 언급하지는 않았지만, 공간 파티션이 있는 하이퍼테이블에서 공간 매개변수 및 시간에 대한 인덱스를 진행한다.

 

select query(조회)

1. 쿼리 분석

유저가 select 쿼리를 실행하면, TimescaleDB는 쿼리를 분석해서 시간 범위나 분할에 대한 조건이 포함되어 있는지 확인한다.

 

2. chunk 선택

시간 범위 등을 기반으로, 해당 조건에 맞는 청크를 찾는다. 하이퍼테이블의 메타데이터에는 파티션 범위가 있기 때문에, 이를 기반으로 필요한 chunk를 선택한다.

 

3. chunk별로 쿼리 실행

선택된 모든 chunk에 query를 실행한다.

 

4. 결과 병합

모든 결과를 하나로 병합한다. 이 과정에서 최종적인 query 결과가 생성된다.