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://docs.mongodb.org/manual/tutorial/expire-data
'DataBase' 카테고리의 다른 글
[MongoDB] MongoDB의 제약사항들. (MongoDB limits thresholds) (0) | 2014.01.28 |
---|---|
[MongoDB] remove, update가 빈번한 collection의 storageSize 유지 전략 (reclaim, shrink storageSize) (0) | 2014.01.27 |
[MongoDB] 샤딩된 레플리카셋 멤버변경 (sharded replica set reconfig) (0) | 2013.07.24 |
[MongoDB] Hash-based Sharding (0) | 2013.05.30 |
[MongoDB] 문서 내부 배열의 특정 원소만 가져오기 (get specific element from sub array) (4) | 2013.05.21 |