mongodb 운영시 로그성 데이터를 특정 날짜(오늘로 부터 30일)까지만 유지하고 이후로는 삭제되게 하려고 합니다.
조회수 3046회
Mysql에서는 Partition table을 이용하여 운영했고, MongoDB에는 capped collection을 고려중이긴 하나, size와 count로만 세팅이 가능한 것 같더군요.
collection을 날짜별로 생성하여 지우는 방법도 고려했으나, 해당 collection이 삭제될 때 database에 영향을 줄 수 있다는 문구가 있더군요..
관련하여 운영 시 노하우가 있으시다면 공유 부탁드립니다 ㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
다음에 해당하지 않으면, cron(프로그램 실행 예약)을 통해서 해당 컬렉션에서 필요한 만큼 삭제하도록 하면 되지 않을까요?
- 정확히 30일 0시 0분 0초를 지켜야 하는 경우. (시간의 문제가 매우 중요한 경우)
- 삭제된 데이터도 별도로 보관해야 하는 경우.
- 24시간 내내 데이터베이스의 부하가 높은 경우
대체로 많이 사용하지 않는 시간에 컬렉션에서 데이터를 삭제하는 프로그램을 주기적으로 실행하도록 만 해도 목적을 달성할 수 있을 것 같은데요?
[ 추가 답변 ]
게임 서비스이면 24시간 내내 부하가 있을 가능성이 있네요.
컬렉션 전체 데이터를 삭제하는 것에 대한 성능이 문제인데, 컬렉션의 모든 원소를 삭제하는 것은 매우 느리지만, 컬렉션을 통째로 삭제하는 것은 큰 영향이 없지 않을 것으로 생각됩니다. FileSystem 까지 부하가 발생할 정도의 크기라면... 역시 문제가 될 수 있을 것 같습니다.
db.some_coll.remove({}): // 모든 원소 삭제는 매우 느림 db.some_coll.drop(); // 컬렉션을 통째로 삭제... 이건 한번 테스트 해보셔야할 것 같습니다.
그리고 비슷한 논의가 스택오버플로우에도 있는 것 같네요.
또다른 링크에서도 보면, 컬렉션 자체를 drop 하는 것을 권하네요.
- 답변 감사드립니다. 다만, 게임 서비스이고, 날짜별 관리가 되어야 하는 컬렉션이 게임 로그 데이터이기 때문에 데이터 량이 어마어마할 것으로 판단되어서, 날짜 하나에 해당하는 collection을 날릴 때 원하는 소요 시간내에 삭제 되지 않는 이슈 등으로, database에 영향을 주진 않을까하는 생각에 고민중입니다. 알 수 없는 사용자 2016.4.15 16:40
- 답변을 수정했습니다. 허대영(소프트웨어융합대학) 2016.4.15 17:05
- 말씀대로 collection에 데이터를 많이 넣어서 지웠을 때 database가 영향을 받는지를 테스트를 해봐야 되겠네요. 방향을 잡아주셔서 감사합니다^^ 알 수 없는 사용자 2016.4.15 17:40
-
MongoDB도 컬렉션 별로 TTL설정이 가능한 걸로 알고 있습니다.
TTL을 한달로 설정해 놓으시면 별도로 삭제하지 않으셔도 될것 같네요.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 답변을 늦게 확인했습니다. (메일로 알림이 오지 않더군요;) TTL 기능이 있다는걸 몰랐는데, 확실히 이 방법이 더 간단하겠네요. 감사합니다. 알 수 없는 사용자 2016.5.13 14:25
-
댓글 입력