작성일 댓글 남기기

mongodb 도큐먼트에 ttl 걸기

mongodb 2.2부터 expire 옵션을 쓸 수 있게 되었다.
그래서 일정시간이 지난 후 도큐먼트를 자동으로 삭제할 수 있다.
예를 들어, 네트워크트래픽을 수집해서 시스템을 만들었는데 트래픽데이터를 최근 6개월치만 유지하고 싶을 때
오래된 도큐먼트를 지우는 작업을 따로 하지 않아도 된다.

공식메뉴얼 : http://docs.mongodb.org/manual/tutorial/expire-data/#expire-documents-after-a-certain-number-of-seconds

2가지 방법이 있다.
1. 도큐먼트가 생성된 시각부터 지정된 시간(초)가 지난 후 삭제.
2. 언제 삭제할 지 특정 시각을 도큐먼트에 지정.

지정된 시간이 지난 후 삭제하는 방법을 알아보자.
인덱스를 아래처럼 생성한다.

db.log.events.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )

 

createdAt 칼럼은 도큐먼트에 들어갈 항목이다.
expireAfterSeconds에서는 도큐먼트가 생성된 후 얼마 지난 후 삭제할 것인지 초단위로 지정한다.

이제 도큐먼트를 생성할 때 createdAt 필드를 추가하면 된다.

db.log.events.insert( {
    "createdAt": new Date(),
    "logEvent": 2,
    "logMessage": "Success!"} )

 

createdAt필드에 지금시각을 지정해주면 된다.
python에서 pymongo를 이용하여 도큐먼트를 생성하는 방법은 아래와 같다.

import datetime
doc['createdAt'] = datetime.datetime.utcnow()

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다