본문 바로가기

IT/몽고DB

몽고DB expire after 동작 주기

반응형

MongoDB에서 expire after 동작은 TTL (Time-To-Live) 인덱스를 통해 구현됩니다.
TTL 인덱스를 사용하면 일정 시간 이후에 문서가 자동으로 삭제되도록 설정할 수 있습니다.
이 기능은 주로 로그, 세션 데이터, 임시 데이터를 자동으로 정리하는 데 유용합니다.
 
TTL 인덱스의 동작 주기는 다음과 같은 절차에 따라 이루어집니다
 
TTL 인덱스 생성: TTL 인덱스는 특정 필드에 대해 설정되며, 해당 필드는 날짜 값을 가져야 합니다. 이 필드의 값은 문서가 언제 만료될지를 나타냅니다. 예를 들어, 다음과 같이 인덱스를 생성할 수 있습니다:

db.collection.createIndex({ "expireAt": 1 }, { expireAfterSeconds: 0 })
  1. 여기서 expireAt 필드는 문서가 만료될 시간을 나타내는 날짜 필드이고, expireAfterSeconds 값은 0으로 설정하여 정확한 시간에 만료되도록 합니다.
  2. 백그라운드 프로세스: MongoDB는 백그라운드에서 TTL 모니터 프로세스를 실행합니다. 기본적으로 TTL 모니터 프로세스는 60초마다 한 번씩 실행됩니다. 이 프로세스는 TTL 인덱스를 검사하고, 만료된 문서를 찾아 삭제합니다.
  3. 문서 삭제: TTL 모니터 프로세스가 실행될 때마다 만료된 문서를 찾아 삭제합니다. 이로 인해 실제로 문서가 삭제되는 시간은 최대 60초의 지연이 있을 수 있습니다. 예를 들어, 문서의 만료 시간이 12:00:00이라면, 12:00:00 이후에 실행되는 첫 번째 TTL 모니터 주기에서 해당 문서가 삭제됩니다.

중요 사항

  • TTL 인덱스는 단일 필드에 대해서만 설정할 수 있습니다.
  • expireAfterSeconds 값은 0 이상이어야 합니다.
  • TTL 인덱스를 설정한 필드는 반드시 Date 타입이어야 합니다.
  • TTL 모니터의 주기는 MongoDB 설정에 따라 변경할 수 있지만, 기본값은 60초입니다.

TTL 인덱스를 사용하면 만료된 데이터를 자동으로 정리할 수 있어 데이터베이스 관리가 편리해집니다.
다만, TTL 삭제 작업이 일어날 때 성능에 영향을 미칠 수 있으므로 대규모 데이터베이스에서 사용 시 주의가 필요합니다.

반응형

'IT > 몽고DB' 카테고리의 다른 글

몽고DB - Config 서버  (0) 2025.02.19
몽고DB - mongos  (0) 2025.02.19
몽고DB - Cache Dirty  (1) 2025.02.13
몽고DB 쿼리 실행계획 조회  (0) 2025.02.11
MongoDB 샤드키 선정 정책  (0) 2025.02.06