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










Posted by bloodguy
,