MongoDB 2.2 버전부터 collection의 index에 TTL을 지정하여,
시간이 경과하면 자동으로 삭제해주는 기능이 있음.
일단 동작원리만 간단히 설명하자면 아래와 같다.
1. TTL을 적용할 컬렉션에 expire time을 저장할 index를 만드는데, 옵션에 expireAfterSeconds 가 들어가야 함.
2. 해당 컬렉션에 데이터를 넣을 때, 만들어둔 TTL용 index 필드에는 data/time object값이 들어가야 함.
3. primary 머신에서 백그라운드로 TTL이 다 된 document를 삭제해주는 task가 돌면서 지워줌.
아래의 단서조건이 붙는다.
* TTL용 index 필드는 반드시 date BSON 타입의 데이터만 저장해야 함.
* _id 필드를 이용할 수 없다.
* 이미 index가 걸려있는 필드에 TTL constraints 부여 불가.
* 복합인덱스는 안됨.
* 만약 TTL용 필드가 배열이고 각 배열원소들이 date BSON 타입의 데이터가 저장되어 있다면 자동삭제 task는 해당 원소 중 가장 초기 date/time 값을 기준으로 삭제.
* capped collection에는 사용할 수 없음.
* 자동삭제 task는 60초에 한번씩 동작한다. 그러므로 60초 이하로 지정한 expire time은 정확한 삭제시간을 보장할 수 없다. (=오차범위 60초)
[예제]
// TTL을 적용하고자 하는 컬렉션에 TTL용 index 생성
// 예제에선 logs DB의 mylog collection이라고 가정함.
mongos> use logs
mongos> db.mylog.ensureIndex({expire:1}, {expireAfterSeconds:3600}) // TTL = 1시간
// expire값을 현재시각으로 넣은 이 데이터는 1시간 후에 자동으로 삭제됨
mongos> db.mylog.insert({name:'mytest', expire: new Date()})
출처: http://bloodguy.tistory.com/entry/MongoDB-document에-expire-time-적용하기-expire-TTL [Bloodguy]
'프로그래밍언어 > MongoDB' 카테고리의 다른 글
Mongodb 백업및 복구 (2) | 2020.02.21 |
---|---|
Mongodb Field Update Operators (0) | 2020.02.05 |
MongoDB 설치 MongoDB replicaset 설정 (0) | 2020.02.02 |
MongoDB의 질의 결과를 file에 저장하기 (0) | 2018.08.28 |
MongoDB 예약작업 구현하기 (0) | 2018.08.28 |