https://docs.mongodb.com/manual/tutorial/expire-data/
특정 시간 이후에 데이터를 자동으로 삭제하고 싶을 경우 ttl을 활용한다. mongodb에는 ttl인덱스가 있다.
When adding documents to the log_events
collection, set the createdAt
field to the current time:
일부 자료를 가져왔는데.. 저런식으로 createIndex명령어로 createdAt필드에 expireAfterSeconds옵션을 3600초를 주고 만들면 된다. 데이터 insert시에는 인덱스를 건 createdAt필드에 Date()타입을 넣어주면 정해진 시간 이후로 자동으로 삭제가 된다.
난 몽고 컨트롤을 하는데 파이썬을 쓰기에 pymongo로 했는데.. pymongo로 ttl을 세팅할때는 timezone을 utc로 설정해야한다고 한다.(이상하네요.) https://api.mongodb.com/python/current/api/pymongo/collection.html 를 읽어보면
expireAfterSeconds: <int> Used to create an expiring (TTL) collection. MongoDB will automatically delete documents from this collection after <int> seconds. The indexed field must be a UTC datetime or the data will not expire.
이렇단다. utc로 설정하지 않고 넣어주면 지워지지 않는다고 한다.(적었지만 pymongo기준임.) 대충 테스트코드를 짜서 돌려본 결과 10초 뒤에 잘 지워지는걸 확인했다.
# -*- coding: utf-8 -*- from pymongo import MongoClient, ASCENDING from datetime import datetime from pytz import timezone import urllib class ttl: def __init__(self): host, mongo_id, mongo_password = 'x.x.x.x', 'id', 'password' id = urllib.pathname2url(mongo_id) pw = urllib.pathname2url(mongo_password) self.client = MongoClient('mongodb://{}:{}@{}'.format(id, pw, host), connect=False) self.item_db = self.client['db'] self.collection = 'test' def make_index(self, db, collection, indexcol_list, index_name): db[collection].create_index( [(eachcol, ASCENDING) for eachcol in indexcol_list], name=index_name, background=True, expireAfterSeconds=10, # seconds ) def test(self): self.make_index(self.item_db, self.collection, ['created'], 'expire index') # expire용 인덱스를 만들어줌. self.item_db[self.collection].insert_one({'created': datetime.now(timezone('UTC')), 'rara': 'haha'}) # 인덱스를 만든 created필드에는 timezone UTC의 date를 넣어줌. t = ttl() t.test()
'data engineering' 카테고리의 다른 글
make simple spark docker image (0) | 2020.10.09 |
---|---|
spark mongo data processing, write csv to s3 삽질 정리. (1) | 2020.09.21 |
kubernetes rancher add helm chart catalogs (0) | 2020.08.03 |
kubernetes HostPort, NodePort, cluster IP (0) | 2020.07.28 |
Vault. (0) | 2020.07.16 |