2013-01-22 5 views
2

수십 개의 컬렉션이있는 ~ 3GB mongo 데이터베이스가 있습니다. 이 컬렉션 중 세 개는 초당 ~ 300 개의 쿼리를 처리하지만 나머지는 훨씬 적은 양을 유지합니다. 트래픽이 빠르게 증가 할 것으로 예상됩니다.특정 컬렉션 만 복제하도록 Mongo 복제본 구성

높은 트래픽 수집을 처리하기 위해 복제본 세트를 설정하고 싶습니다. 이 새 인스턴스가 나머지 데이터베이스를 복제 할 필요는 없습니다. 이것이 가능한가?

답변

1

mongodb의 내장 기능으로 현재로서는 불가능한 것처럼 보입니다. 유일한 방법은 직접 작성한 복제 알고리즘을 사용하거나 제 3자가 작성한 다른 도구를 사용하는 것입니다.

https://github.com/wordnik/wordnik-oss 프로젝트는 다음 게시물에 따라이를 달성하는 데 도움이 될 수 있습니다.

https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/Ap9V4ArGuFo

복제 문서를 필터링하는 해결 방법을 설명합니다.

Replicate only documents where {'public':true} in MongoDB

또는

은 가치가 노력하고 있습니다 직접 수동으로 데이터를 복제합니다.

행운을 빈다.

+0

링크를 제공해 주셔서 감사합니다. "필터링 된 복제"는이 기능의 실현 여부를 확인하기위한 올바른 문구처럼 들립니다. – mchail

+0

당신은 환영합니다 =) 커뮤니티가 활발히 활동하고 있습니다. 나는 그들이 필요한 기능을 궁극적으로 개발할 것이라고 확신합니다. =) – cubbuk

+0

@cubbuk - 지난 코멘트에 대해서는 2016 년 5 월입니다. 오늘 옵션을 알고 있습니까? – arcseldon

0

아니요 지금은 불가능합니다. 이러한 컬렉션을 다른 복제되지 않은 데이터베이스로 옮기는 것입니다. 그러나 이러한 콜렉션들이 더 높은 트래픽을 보게되면 두통이 생길 것입니다. 따라서 이들을 "복제"-db로 옮겨야합니다.

그러나 일반적으로 복제는 확장해야하는 경우 갈 방법이 아니므로 DR/장애 조치를 고려해야합니다. Replicaset Secondaries는 (선택적으로) 읽기 쿼리 만 응답 할 수 있지만 쓰기 쿼리는 사용할 수 없습니다.이 점에 유의해야합니다. 따라서 쓰기 부하가 높으면 문제가 해결되지 않을 수 있습니다.
애플리케이션을 보조 애플리케이션에서 읽도록 허용하면 최종 일관성을 유지해야합니다. 즉, 애플리케이션이 항상 최신 데이터를 볼 수있는 것은 아닙니다. 이는 보조 노드로의 비동기 복제로 인해 발생합니다.
실제로 writeeconcern을 구성하면이 문제를 해결할 수 있으므로 작성된 것으로 간주되고 드라이버가 반환되기 전에 모든 복제본에서 쓰기가 성공해야합니다. 그러나 이로 인해 쓰기 작업이 상당히 느려질 수 있습니다.

따라서 쿼리 실행 기능을 확장하려면 Sharding을 사용해야합니다. 이는 컬렉션 수준에서 가능하며 모든 공유되지 않은 컬렉션은 "기본 샤드"로 유지됩니다.

0

데이터 크기가 너무 작고 이러한 모음이 업데이트되지 않으면 복제 할 때 발생하는 유일한 오버 헤드는 보조 저장소의 작은 저장소 크기입니다. 특히 복제 로직을 작성하는 것과 비교할 때 컬렉션의 크기가 커지지 않기 때문에 상대적으로 적은 비용을 지불해야합니다.

관련 문제