최신 기술/mongodb

[Tech] TTL 기능 사용하기

카리스킴 2015. 10. 14. 14:49

TTL 기능을 사용하여 원하는 시간이 지난 후에 해당 row 혹은 document 를 collection 에서 삭제할 수 있다. 

Token 같은 시간이 지난 후에 expire 되어야 하는 것들을 저장할 경우에 유용한 기능이다. 


MongoDB 홈피에서 자세히 설명해 준다. 

http://docs.mongodb.org/manual/tutorial/expire-data/


1. TTL 기능을 사용하기 위해서는 특정 필드에 인덱스를 만들어 준다. 이 때 options 의 expireAfterSeconds 값에 원하는 시간 (초) 을 넣어 준다. ex) createdAt => 날짜값이 들어가는 특정필드 


db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )    // 1시간 이후 expire


P.S) 참고로 3.0.0 버전 이하에서는 ensureIndex 를 사용하고 있는데 이것은 그 이후 버전에서는 deprecated 되었다. 


2. log_events 컬렉션에 데이터를 넣을 때 createdAt 필드 값에 현재 시간을 넣어 준다. 


db.log_events.insert( {

   "createdAt": new Date(),

   "logEvent": 2,

   "logMessage": "Success!"

} )


3. 자동으로 mongodb 가 createdAt 필드값에서 expireAfterSeconds 가 지난 경우 삭제를 하게 된다. 


P.S) 만약 해당 document 에서 createdAt 의 날짜를 변경해도 TTL 기능이 변경된 날짜에 맞춰 적용된다. 


P.S) TTL 작업은 약간의 delay 가 있을 수 있다. 그래서 바로 지워지지 않을 수 있다. 아래의 페이지를 참고한다. 


https://docs.mongodb.org/v3.0/core/index-ttl/#timing-of-the-delete-operation