[NoSQL] AWS DynamoDB 사용기 - TTL로 데이터 삭제하기

정 승 연·2025년 1월 20일
0

DynamoDB TTL(Time To Live)

DynamoDB TTL 사용 계기

알림 히스토리를 dynamodb 에 저장한다.

알바생 유저 1명당 하루에 3개의 알림 히스토리를 생성하기에, 알림 히스토리 데이터가 적재되는 것이 많다고 생각했다. 그래서 이를 효율적으로 관리 해야한다 생각했고, 주기적으로 데이터를 삭제하는 정책을 세웠다.

팀원들과 논의 결과 일단 알림 히스토리 삭제 주기를 1달로 잡았고, 30일 주기로 데이터가 삭제되길 원했다. (추후 변동 가능성 있음)

또한 TTL의 비용은 0이다. 쓰기(삭제) 연산 비용은 공짜이며, TTL 사용을 위해 부가적으로 사용된 데이터 저장 공간 비용만이 청구된다.

Nosql DynamoDB를 사용하는 만큼, DynamoDB에서 지원하는 TTL 기능을 이용해 주기적인 데이터 관리를 하고자 한다.

DynamoDB 설정

DynamoDB TTL 설정은 생각보다 쉽다.

  1. DB설정 들어가기
  2. TTL 설정 켜기
  3. TTL 판별할 칼럼 설정하기
    • 기존의 칼럼을 활용할까 생각했지만, 기존 칼럼을 사용하다가 다른 데이터를 지우는 불상사가 생길 수 있어 ttl 칼럼을 분리했다.
  4. TTL 판별 칼럼에 unix 시간 저장하기
    • 데이터 저장시에 현재시간보다 지정한 시간(하루 또는 한달 등) 을 더해 unix 시간으로 만들어 저장한다.
  5. aws가 알아서 삭제해준다.

DynamoDB TTL 판별 방법

DynamoDB에서 TTL을 판별하는 방법은 2가지가 있다.

  1. 테이블을 스캔하여 현재시간과 만료 기간을 비교해 만료된 아이템을 표시
  2. 테이블을 스캔하며 첫번째 프로세스가 표시한 만료된 아이템을 찾아 삭제

이에 따라 유저가 정의한 TTL 설정 시간과 실제 데이터가 삭제 되는 시간 사이에 간격이 발생할 수있다. 이러한 간격은 테이블 파티션 크기와 파티션에서 사용한 연산양에 비례해 커진다. 이러한 시간 간격은 최대 48 시간까지 발생할 수 있다고 aws 는 정의한다.

이러한 방식이기때문에 온전히 정확하지 않을 수 있다. 따라서 48시간 내에 삭제될 수 있다.

0개의 댓글