TimescaleDB
An open-source time-series SQL database optimized for fast ingest and complex queries. Packaged as a PostgreSQL extension.
Categories
About
- Time-series 데이터를 위한 멀티노드, 페타바이트 지원 RDB (PostgreSQL 기반)
- Timescale License로 완전히 Free
- as-a-service 는 불가
시계열 데이터 (Time-series Data) 란?
A가 B에게 돈을 보낸다면 양쪽에서 숫자가 빠지고 늘어난 것만 기록하면 되지만, 시계열 데이터는 데이터의 변경을 UPDATE가 아닌 INSERT로 추적하는 데이터 셋. 이 변경 정보를 통해서 이 둘이 어떤 관계가 있거나 둘사이에 어떤 일이 벌어지고 있다는 것을 알수 있게 됨.
시계열 데이터는 금융,제조,전력,유틸리티등 산업에 주로 적용되었지만 지난 몇년간 모니터링, IoT, 암호화폐, 게임, 머신러닝 등의 성장으로 폭발적으로 쓰임새가 증가 데이터 기반 의사결정을 위해서 변화를 추적할 수 있는 가장 정확한 데이터.
Quick start
Docker를 사용한다면:
docker run --rm --name timescaledb -p 5432:5432 -e POSTGRES_USER=userid -e POSTGRES_PASSWORD=password timescale/timescaledb:2.1.0-pg13
Hypertable
PostgreSQL 테이블 (후자를 대체)에서 TimescaleDB 하이퍼 테이블을 생성하고 시간에 따라 분할되고 하나 이상의 다른 열 (즉, 공간)에서 분할하는 옵션을 사용합니다. ALTER TABLE, SELECT 등과 같은 모든 작업은 결과 하이퍼 테이블에서 계속 작동합니다.
Required Arguments
-
relation
- Identifier of table to convert to hypertable.
-
time_column_name
- Name of the column containing time values as well as the primary column to partition by.
Example
CREATE TABLE conditions (
time TIMESTAMPTZ NOT NULL,
location TEXT NOT NULL,
temperature DOUBLE PRECISION NULL,
humidity DOUBLE PRECISION NULL
);
conditions
테이블의 time
컬럼을 인자로 넘기면 된다.
APIs
add_retention_policy
Create a policy to drop chunks older than a given interval of a particular hypertable or continuous aggregate on a schedule in the background. (See drop_chunks). This implements a data retention policy and will remove data on a schedule. Only one retention policy may exist per hypertable.
관리 방법 및 TIP
Chunk
- table 생성후 hypertable 적용하면 chunk table이 생성된다.
- chunk table을 따로 설정하지 않았다면 기본주기는 7일이며 7일뒤에 새로운 chunk table을 생성한다.
- chunk table은 table에 저장된 data들을 가지고 있다.
- chunk table 삭제시 data들도 삭제된다.
TimeScaleDB 오래된 데이터 제거
시계열 데이터는 데이터가 많이 쌓이므로 주기적으로 제거할 필요가 있지만, DELETE로 삭제시 많은 부하가 걸리므로 아래와 같은 방식을 공식홈페이지에선 추천한다.
지정된 정책을 제거하고 싶다면:
JOB 상태는 다음 쿼리로 확인할 수 있다.
chunk table이 삭제가 안되는 경우
- chunk table이 한개밖에 없는 경우
- chunk table의 주기를 확인해보자.
Chunk Table의 주기 설정
- 24시간 주기 설정
- 이 설정은 테이블 생성시 설정한 주기가 끝난 이후에 적용된다.
- 만약 테이블 생성시 설정하지 않았다면 기본설정인 7일 이후에 적용된다.
시계열 데이터를 위한 고급 SQL 함수
Timescale에는 더 적은 코드 줄로 시계열 분석을 수행하는 데 도움이 되는 많은 사용자 지정 SQL 함수가 있습니다.
이러한 기능의 예는 다음과 같습니다.
- time_bucket() - 임의의 시간 간격에 대한 데이터 분석에 사용
- first() - 집계 그룹 내 시간을 기준으로 가장 빠른 값을 찾는 데 사용
- last() - 집계 그룹 내에서 시간을 기준으로 최신 값을 찾는 데 사용
- time_bucket_gapfill() - 임의의 시간 간격으로 데이터를 분석하고 데이터의 공백을 채우는 데 사용
- locf() - 마지막으로 관찰된 값을 앞으로 전달하여 데이터의 공백을 채우는 데 사용
- interpolate() - 알려진 데이터 포인트 사이의 결측값을 선형으로 보간하여 공백 채우기 사용
time_bucket
다음 time_bucket()
은 지난 6개월 동안 각 도시의 15일 평균 기온을 찾는 데 사용하는 방법의 예입니다:
-----------------------------------
-- time_bucket
-- Average temp per 15 day period
-- for past 6 months, per city
-----------------------------------
SELECT time_bucket('15 days', time) as "bucket"
,city_name, avg(temp_c)
FROM weather_metrics
WHERE time > now() - (6* INTERVAL '1 month')
GROUP BY bucket, city_name
ORDER BY bucket DESC;
A4y 테스트에 사용된 쿼리:
SELECT time_bucket('1 days', time) as bucket,
max(pm10) as max_pm10,
min(pm10) as min_pm10
FROM a4y_state
WHERE time > now() - (6* INTERVAL '1 month') and uid=1079
group by bucket;
See also
Favorite site
- TimescaleDB web site
- Github - timescaledb
- TimescaleDB 2.0: A multi-node, petabyte-scale, completely free relational database for time-series
- TimescaleDB vs. Amazon Timestream: 6000x higher inserts, 5-175x faster queries, 150x-220x cheaper