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

조회수 2850회

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을 한달로 설정해 놓으시면 별도로 삭제하지 않으셔도 될것 같네요.

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

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)