- HyperGROOVE
- Hood Rabbit의 맥(Mac) 갤러리
- 울지않는벌새 : Security, Mo⋯
- :: 붕어IQ의 세상사는 이야기 ::
- DATA FILEE STYLE
- 하얀잉크의 해피컨텐츠
- 이카루스의 리뷰토피아
- Kurien's Blog
- 사진은 권력이다
- 우리집 고양이는 TV를 본다
- 못된준코의 세상리뷰
- 에우르트는 나쁜남자 -_-
- 아이엠피터
- 김용택의 참교육이야기
- 다락방의 추억 상자
- All you need are LOVE
- 천추의 IT 이야기
- 서관덕의 시간이 머문 작은공간
- 티비의 세상구경
- TB의 SNS 이야기
- 그래서 난 아직도 ing :Seas⋯
- 자로의 꿈
- 꿈 많은 개발자가 되자! Tae-⋯
- 다산인권센터
- 아이폰주무르기
- 신씨's 쌀롱
- 구브의 잡동사니
- 해리의 문화예술 다이어리
- 꿈꾸는자의 생각의 파편들...
- 밀양765kV송전탑OUT
- 기묘한 블로그
- 소비자와 함께 만드는 공간⋯
- 투명사회를 위한 정보공개센터
- 아는만큼 쓰는 블로그
- 작은outsider의 생각누리
- Script Programming(스크립트⋯
- 선대인의 인사이트
- Programming is Fun
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Route53
- 경영
- 가상화
- Kubernetes
- container
- openSUSE
- git
- OpenShift Origin
- centos
- mysql
- mongodb
- Open vSwitch
- 100년의기업
- 창업
- Ansible-playbook
- 세월호
- opensuse 11.3
- glusterfs
- Linux
- ubuntu
- Virtualization
- k8s
- Xen
- Openshift
- statefulset
- external-dns
- 100년의가게
- Ubuntu 9.10
- 세월호 참사
- Docker
- Today
- 9
- Total
- 1,108,261
Bryan's Tech-Log
mongodb ttl collection 사용에 관하여(pymongo 추가) 본문
[mongodb client UI]
MongoDB 2.2.x 2.1.2 부터 TTL(Time To Live) 기능이 제공되고 있다. IT에 익숙한 분이라면 icmp, DNS, cache server 등의 프로토콜이나 설정/작동 방법상에서 자주 나타나는 용어라는 것을 알 수 있으리라.
-
mongodb의 Date 에 해당하는 날짜시간 데이터가 저장되는 필드가 필요하고, 여기에 ensureIndex로 인덱스를 두는 방식이다
-
해당 필드는 다른 index 에 복합적으로 참조되지 않아야 한다(단일 필드, 단일 인덱스)
-
해당 필드에는 위 1번에서 처럼 Date BSON type의 데이터가 UTC 기준으로 저장되어야 자동으로 지워진다
-
mongodb의 ttl thread는 1분단위로 동작한다. 즉 10초로 설정한다고 데이터 저장 후 10초만에 지워지는 것이 아니라 1분 가량의 오차가 존재하며, DB 시스템의 부하 정도(mongod의 workload가 얼마나 큰지)에 따라 달라질 수 있다는 즉, 정확히 해당 시간 경과후 지워진다는 보장은 없다는 것.
-
모든 컬렉션의 공통 필드인 _id 필드는 ttl 필드로 사용할 수 없다.
-
capped collection은 ttl index를 적용할 수 없다.
응용할 수 있는 트릭이라면, 지워지게 하고 싶지 않은 데이터가 있을 경우 어떨게 하면 될까?
한 가지 방법은 보관이 필요한 데이터를 찾아서 ttl 설정 필드 값을 Date() 로 update하는 것이다. 만약 계속 보존처리를 해야 한다면 매번 update를 수행해야 할 것이고,
계속 보존해야 한다면, 단순하게도 다음과 같이 ttl 필드를 Date가 아닌 다른 데이터 값으로 설정하면 된다.
> db.tt_col.update( { id: 'id1' }, { dt: null } );
[pymongo 2.3]
사용 방법은 유사하지만 python 내에서 ttl 기능 설정/사용시에 유의할 사항이 있다. 아래 예시의 함정을 찾아 보자.
Python 2.7.2 (default, Aug 19 2011, 20:41:43) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymongo
>>> from datetime import datetime, date, time, timedelta
>>> datetime.now()
datetime.datetime(2012, 11, 2, 2, 3, 50, 18750)
>>> pyMongoConnStr = 'mongodb://10.10.10.70:28017/myschema'
>>> connMongo = pymongo.Connection( pyMongoConnStr )
15초 가량 후에 해당 row가 삭제되어야 하는데, 10분이 지나도 멀쩡하게 남아 있다. index 설정을 봐도 잘못 된게 없고, 시스템 시간도 정확하게 현재시간을 가리키고 있는데, ...
결론을 말하자면, 위에서 등록한 row는 한국 시간으로 9시간 가량 후에 지워질 것이다. 왜냐하면 mongodb의 ttl thread 는 UTC 를 기준으로 작동하는데, python에서 mongodb에 등록한 데이터(row)에서 dt 필드의 값인 datetime.now() 는 KST(대한민국표준시; 또는 시스템 시간이 localtime) 기준의 시간 값이기 때문이다. 즉 python에서 ttl index 필드의 시간 값을 설정할 때는 반드시 datetime.utcnow() 를 사용하여야만 한다. 이점 유의하자.
- Barracuda -
'Technical > DBMS' 카테고리의 다른 글
Mariadb galera cluster 로 구성하는 MySQL 호환 Multimaster DBMS, on Ubuntu (7) | 2015.07.13 |
---|---|
mongodb ttl collection 사용에 관하여(pymongo 추가) (0) | 2012.11.10 |
Silent mode Oracle 11gr2 설치 - CentOS 5.5 x64, cloudn VM에서 (0) | 2012.09.25 |
MongoDB 백업(dump)와 복구(restore) (0) | 2012.09.18 |
HammerOra로 DBMS 성능 측정하기(TPC-C) -2 (2) | 2012.09.14 |
HammerOra로 DBMS 성능 측정하기(TPC-C) -1 (0) | 2012.09.05 |
- Tag
- mongodb, TTL, ttl collection, ttl 컬렉션, 자동삭제