2012-01-31 8 views
2

메모리에서 사용중인 인덱스를 유지할 수 없다면 MongoDB의 속도가 느려진다는 것을 알 수 있습니다. 샤딩과 어떻게 다른가? Sharded는 메모리에 자신의 BTree만을 유지합니까? 아니면 모든 Shard가 전체 컬렉션의 인덱스를 메모리에 유지해야합니까?Sharing을 사용한 메모리의 MongoDB 인덱스

답변

5

가 분산됩니다 만 메모리에 자신의 BTREE을 유지합니까 ...?

예, 각 샤드는 자체 색인을 관리합니다.

거리의 단어는 메모리에서 사용중인 색인을 유지할 수없는 경우 MongoDB가 느려진다는 것입니다.

샤딩 및 보조 색인을 사용할 때 실제로 악화 될 수 있습니다. 중요한 문제는 라우터 프로세스 (mongos)가 보조 인덱스의 데이터에 대해 아무 것도 모르는 것입니다.

샤드 키를 사용하여 쿼리를 수행하면 올바른 서버로 직접 라우팅됩니다. 대부분의 경우 작업 부하를 평준화합니다. 따라서 100 개의 쿼리를 100 개의 서버에 분산시킬 수 있으며 각 서버는 1 개의 쿼리에만 응답합니다.

그러나 보조 키를 사용하여 쿼리를 수행하는 경우 해당 쿼리는 모든 서버로 이동해야합니다. 따라서 라우터에 대한 100 개의 쿼리는 100 개의 서버에서 10,000 개의 쿼리를 생성하거나 서버 당 100 개의 쿼리를 생성합니다. 더 많은 서버를 추가 할 때 이러한 "비 shardkey"쿼리는 점점 더 효율적이지 않게됩니다. 작업량이 이 아니고이 더 균형을 이룹니다.

일부 자세한 내용은 MongoDB 문서 here에서 확인할 수 있습니다.

+0

두 개 이상의 키를 공유하는 경우 여전히 모든 키에 대해 효율적인 쿼리를 수행 할 수 있습니까? – nnythm

+1

예, 복합 키의 색인 및 정렬 제한 사항이 있습니다. 이것을 테스트해야하고 어떤 쿼리가 작동하는지 알면 키 순서가 매우 중요합니다. –

관련 문제