티스토리 뷰

MongoDB/Index

TTL Index

mongoT 2020. 2. 27. 23:30

특정 시간이 지난 후에 알아서 DB에서 사라지게 만들고 싶다면

TTL Index를 고려해 볼만하다.

 

What is TTL Index?

 

TTL은 TIME TO LIVE의 약자. 

 

'살아있을 시간'이란 뜻에서 알 수 있듯이.

 

일정 시간이 지나면 expire 된다.

 

TTL인덱스를 만드는 법:

db.collection.createIndex({ <field> : 1 }, { expireAfterSeconds: <time> })

 

1. eventlog라는 collection에 date객체를 가지고 있는 document를 하나 넣어두고 

2. TTL인덱스 생성

3. document를 넣어주고

4. 10초 이상의 시간을 기다린 뒤 

이와 같이 사라진 것을 알 수 있다.

TTL의 한계:

1. '10초 이상의 시간'

 나는 분명히 expireAfterSeconds를 10s로 설정했지만

 해보면 알겠지만 10초 뒤 삭제될 확률은 극히 낮다.

 

 why?

expire 되는 시점!== 삭제(Delete)되는 시점

 

이에는 여러 가지 요인이 작용한다.

 

1. background task는 expired 된 documents를  매 60초다 삭제한다는 것.

2. mongod인스턴스에 부하가 많으면 늦어질 수 있다는 점. 

 2. Datatype이 date객체이거나 date객체를 가진 필드에서만 적용

date나 [date, date,...]가 아닌 다른 필드에서 사용 시 무시된다.

 

3. _id필드에는 TTL인덱스 생성 불가

4. Compund인덱스로 생성 불가

4. non-TTL 인덱스가 존재하면 TTL인덱스 생성 불가

 

공식 레퍼런스: https://docs.mongodb.com/manual/core/index-ttl/index.html

'MongoDB > Index' 카테고리의 다른 글

Winning Plans and regected Plans  (0) 2020.02.28
covered query  (0) 2020.02.28
Unique Index and Missing Field  (0) 2020.02.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함