데이터베이스 (DB)/InfluxDB

InfluxDB에서 Retention Policy 설정하기

0. 들어가기 전에


지난 포스팅에서 InfluxDB의 기본 사용법에 대해 알아보았다.

 

그중 데이터를 삭제하기 위해 DELETE 쿼리문이 있음을 보았는데 실제로 시계열 데이터베이스에서는 직접 쿼리문을 통해 데이터를 삭제하지 않는다.

그 이유는 시계열 데이터베이스의 주목적이 데이터 삽입과 조회에 있기 때문이다.

 

실시간으로 수집된 데이터에서 명시적으로 어떠한 데이터를 삭제하게 된다면 이것은 시스템적으로 에러를 불러일으키거나 분석에 있어 모순될 수 있다.

 

하지만 마냥 데이터를 삭제하지 않고 계속 수집만 할 것인가? 그건 또 아니다.

초당 수많은 데이터를 읽어들이다보면 메모리도 많이 잡아먹게 될 것이고 속도도 많이 느려질 것이다.

 

이때 사용하는것이 Retention Policy(보존 정책)이다.

 


1. Retention Policy(보존 정책)이란 무엇인가?


Retention Policy는 자동으로 오래된 데이터부터 삭제시켜주는 정책이다.

다시 말하면 데이터를 얼마나 저장시킬 수 있는지 지정할 수 있다.

 

각 데이터베이스마다 Retention Policy를 다르게 지정할 수 있으며 별도의 설정을 하지 않았다면 데이터베이스 생성과 동시에 autogen이라고 하는 기본 정책이 만들어진다.

 


2. Retention Policy 확인하기


현재 DB의 Retention Policy 목록을 확인하려면 아래와 같이 입력하면 된다.

SHOW RETENTION POLICIES

 

※ 데이터베이스를 생성하면 자동으로 생성된 데이터베이스로 use된다.

자동으로 생성된 autogen을 살펴보자.

  • name : Retention Policy의 이름
  • duration : data를 보존할 기간
  • shardGroupDuration : shardGroup이 적용되는 기간
  • replicaN : 클러스터에 저장되는 data의 복사본의 개수
  • default : 현재 사용 중인 database의 기본 정책인지

 


3. Retention Policy 생성하기


자동 생성된 정책은 그대로 두고 새로운 정책을 만들고 싶다면 아래와 같은 형태로 입력하면 된다.

CREATE RETENTION POLICY  "정책이름" ON "DB이름" duration_option replication_option [shard_group_duration_option] ["DEFAULT"]

예시)

CREATE RETENTION POLICY "rp_test1" ON "myDB" DURATION 24h REPLICATION 1
CREATE RETENTION POLICY "rp_test2" ON "myDB" DURATION 48h REPLICATION 1 DEFAULT
CREATE RETENTION POLICY "rp_test3" ON "myDB" DURATION 72h REPLICATION 1 SHARD DURATION 24h

대괄호로 묶어둔 부분은 생략이 가능하다는 표시다.

 

여기서 SHARD DUTAION 옵션을 생략하고 정책을 생성하면 duration 값에 따라 shardGroupDuration의 값도 달라진다.

duration이 24h이 넘어갈 경우 shardGroupDuration의 값은 24h, 넘어가지 않을 경우에는 1h로 자동 초기화된다.

 

 

만약 데이터베이스 생성과 동시에 정의하고 싶다면 아래와 같이 하면 된다.

CREATE DATABASE "DB이름" [WITH [duration_option] [replication_option] [shard_group_duration_option] [retention_policy_name_option]]
CREATE DATABASE "myDB_1" WITH NAME "myRP"
CREATE DATABASE "myDB_2" WITH DURATION 1d REPLICATION 1 SHARD DURATION 12h NAME "default_rp"

데이터베이스 생성과 동시에 정책을 생성하게 되면 autogen을 수정하는 것과 동일하며 이것이 기본 정책이 된다.

 


4. Retention Policy 수정하기


이미 생성된 정책을 수정하거나 autogen을 수정하고 싶을 때는 어떻게 해야 할까?

 

ALTER RETENTION POLICY "정책이름" ON "DB이름" option [option] [option] [option]
ALTER RETENTION POLICY "rp_test3" ON "myDB" DURATION 12h SHARD DURATION 2h DEFAULT
ALTER RETENTION POLICY "autogen" ON "myDB" DURATION 200h

이때 주의해야 할 점은 duration의 값은 shardGroupDuration보다 크거나 같아야 한다.

 


5. Retention Policy 삭제하기


DROP을 사용하여 정책을 삭제할 수 있다.

 

DROP RETENTION POLICY 정책이름 ON DB이름
DROP RETENTION POLICY rp_test3 ON myDB

DEFAUL인 정책도 삭제가 가능한데 웬만하면 DEFAULT는 설정해주는 게 좋다.

 


6. 마무리


이와 같이 InfluxDB에서는 Retention Policy, 보존 정책으로 별도의 쿼리문 실행 없이 오래된 데이터를 삭제할 수 있다.

 

다음 포스팅에서는 Python3 언어를 통해서 InfluxDB에 접근해보도록 하겠다.