2014-01-17 2 views
0

오래된 데이터를 제거하고 고통없이 OS로 다시 디스크 공간을 회수하는 매우 깔끔하고 저렴한 방법을 찾고 있습니다.MongoDB : 큰 데이터 세트를 직접 파티션 하시겠습니까?

샘플링 데이터 (타임 스탬프 + 속성 모음)를 저장합니다. 그것의 제비. 각 샘플은 단일 문서이며 컬렉션이 커집니다.

캡핑 된 컬렉션은 시간 범위를 기반으로 데이터를 저장해야하기 때문에 문제가되지 않습니다. TTL 인덱스가 필요로하는 공간 때문에 TTL 컬렉션이 좋지 않을 수 있습니다. 엄청나게 커질 수 있습니다. 다른 이유로 샤딩이 해제되었습니다.

그래서 내가 생각한 것은 모든 것을 나 자신으로 분할하는 것입니다. 데이터 파티션 (예 : 주 단위)을 별도로 저장할 것입니다. 매주 새로운 '파티션'을 시작할 것입니다. 또한 매주 일부 오래된 '파티션'을 삭제합니다. 잔인하고 단순합니다. 많은 양의 색인 된 데이터를 제거하므로 문서를 삭제하는 대신 삭제됩니다.

여기서 '파티션'에 사용해야하는 질문은 무엇입니까? 컬렉션 또는 데이터베이스? 기술적으로 어느 쪽이든 갈 수있는 앱은 Java 기반이므로 컬렉션 또는 데이터베이스를 쉽게 관리 할 수 ​​있습니다.

컬렉션을 삭제하는 것에 대한 우려는 mongodb에서 사용되어 디스크 공간을 다시 OS로 회수하는 데 문제가 있다는 것입니다. 그런 다음 재사용을 시도합니다. 단편화 문제가있을 수 있으며 복구() 할 필요가 있습니다.

더 효율적인 방법으로 데이터베이스를 삭제 하시겠습니까?

다시 말해서 새로운 데이터를 펌프하면서 이전 데이터의 테라 바이트를 없애는 데 가장 방해가되지 않는 방법이 필요합니다. 두 가지 방법 모두 사용 경험이 있다면 공유하십시오.

답변

1

매주 새로운 '파티션'을 시작하기 만하면됩니다.

한 가지 일반적인 해결책은 단지 주당 모음을 만드는 것입니다. recordings_wk53과 같은 이름을 지정하고 매주 모음을 삭제하십시오.

컬렉션 또는 데이터베이스?

컬렉션은 응용 프로그램 내에서 관리하기가 쉽고 삭제할 파일이 적기 때문에 빠를 수 있지만 (예 : 기타) OS에 디스크 공간을 확보하지 않습니다.

이제는 데이터베이스를 사용하여 비교적 쉽게이 작업을 수행 할 수 있습니다. 응용 프로그램 내에서 주간 연결을 만들 수 있습니다. 단 100 개만 관리해야하며, 수직으로 확장하는 수단으로 사용하지 않는 것이 좋습니다. OPs 패턴 등 유스 케이스에 꽤 잘되어야합니다.

더 효율적인 방법으로 데이터베이스를 삭제 하시겠습니까?MongoDB를 다시 공간을 해제하지 않는 이유

흠이 매우 주관적이고 자기 의견을 고집하는 질문이다 그러나 나는 아마 수집을 위해 갈 것입니다, 다음 MongoDB를 그냥 즉시 모든 공간을 재 할당 할 필요없이 해당 모음을 다시 사용할 수 있습니다, 내 말은 즉 OS에; 그래서 그것을 다시 시작할 필요가 없습니다.

+0

감사합니다. 이것은 데이터베이스 삭제 중 디스크 공간을 회수하지 못하는 콜렉션 삭제에 대해 듣고 싶었습니다. – Dima

관련 문제