mongodb 운영시 로그성 데이터를 특정 날짜(오늘로 부터 30일)까지만 유지하고 이후로는 삭제되게 하려고 합니다.


Mysql에서는 Partition table을 이용하여 운영했고, MongoDB에는 capped collection을 고려중이긴 하나, size와 count로만 세팅이 가능한 것 같더군요.

collection을 날짜별로 생성하여 지우는 방법도 고려했으나, 해당 collection이 삭제될 때 database에 영향을 줄 수 있다는 문구가 있더군요..

관련하여 운영 시 노하우가 있으시다면 공유 부탁드립니다 ㅠㅠ


조회수 330


2 답변


좋아요
2
싫어요
채택취소하기

다음에 해당하지 않으면, cron(프로그램 실행 예약)을 통해서 해당 컬렉션에서 필요한 만큼 삭제하도록 하면 되지 않을까요?

  • 정확히 30일 0시 0분 0초를 지켜야 하는 경우. (시간의 문제가 매우 중요한 경우)
  • 삭제된 데이터도 별도로 보관해야 하는 경우.
  • 24시간 내내 데이터베이스의 부하가 높은 경우

대체로 많이 사용하지 않는 시간에 컬렉션에서 데이터를 삭제하는 프로그램을 주기적으로 실행하도록 만 해도 목적을 달성할 수 있을 것 같은데요?

[ 추가 답변 ]

게임 서비스이면 24시간 내내 부하가 있을 가능성이 있네요.

컬렉션 전체 데이터를 삭제하는 것에 대한 성능이 문제인데, 컬렉션의 모든 원소를 삭제하는 것은 매우 느리지만, 컬렉션을 통째로 삭제하는 것은 큰 영향이 없지 않을 것으로 생각됩니다. FileSystem 까지 부하가 발생할 정도의 크기라면... 역시 문제가 될 수 있을 것 같습니다.

db.some_coll.remove({}): // 모든 원소 삭제는 매우 느림
db.some_coll.drop(); // 컬렉션을 통째로 삭제... 이건 한번 테스트 해보셔야할 것 같습니다.

그리고 비슷한 논의가 스택오버플로우에도 있는 것 같네요.

또다른 링크에서도 보면, 컬렉션 자체를 drop 하는 것을 권하네요.

  • 2016년 04월 15일에 수정됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.
  • 2016년 04월 15일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 답변 감사드립니다. 다만, 게임 서비스이고, 날짜별 관리가 되어야 하는 컬렉션이 게임 로그 데이터이기 때문에 데이터 량이 어마어마할 것으로 판단되어서, 날짜 하나에 해당하는 collection을 날릴 때 원하는 소요 시간내에 삭제 되지 않는 이슈 등으로, database에 영향을 주진 않을까하는 생각에 고민중입니다.     Seseong Jang   2016.4.15 16:40     
  • 답변을 수정했습니다.    허대영(Daeyoung Heo)   2016.4.15 17:05     
  • 말씀대로 collection에 데이터를 많이 넣어서 지웠을 때 database가 영향을 받는지를 테스트를 해봐야 되겠네요. 방향을 잡아주셔서 감사합니다^^    Seseong Jang   2016.4.15 17:40     

MongoDB도 컬렉션 별로 TTL설정이 가능한 걸로 알고 있습니다.

TTL을 한달로 설정해 놓으시면 별도로 삭제하지 않으셔도 될것 같네요.

https://docs.mongodb.org/manual/tutorial/expire-data/

  • 2016년 04월 15일에 작성됨
    프로그래밍 언어를 좋아하는 프로그래머

  • 답변을 늦게 확인했습니다. (메일로 알림이 오지 않더군요;) TTL 기능이 있다는걸 몰랐는데, 확실히 이 방법이 더 간단하겠네요. 감사합니다.    Seseong Jang   2016.5.13 14:25     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close