2011-11-24 4 views
3

가정하자 컬렉션 "콜"은 인덱스 TS는, X 및 Y가 입력되어 NumberLong으로 Whremongos/지능형 라우팅

{ts : 1, X : 1 , Y : 1} 

있다.

컬렉션은 다음과 같은 쿼리를 실행하는 방법 나를 이해하는 데 도움이 수, TS에 샤딩에 대한 X

를 구성?

1) 제한없는 범위 : 다음 쿼리는 범위가 ts> 100000000 범위 인 샤드에서만 대상으로 지정됩니까? 아니면 글로벌 쿼리입니까?

db.coll.find({ts : {$gt : 100000000}}) 

2) 경계 범위 : 그렇다면이 방법은 어떻습니까? mongos는 쿼리를 분석 할만큼 충분히 똑똑합니까? -

db.coll.find({$and : [{ts : {$gt : 100000000}}, {ts : {$lte : 110000000}}]}) 

3) 마지막으로/여러 승 무슨 일이 범위 경계 : 나는 http://www.mongodb.org/display/DOCS/Sharding+Introduction에 대한 조회 범위 어떤 참조를 찾을 수 없습니다입니다

db.coll.find({$or : [[{$and : [{ts : {$gt : 100000000}}, {ts : {$lte : 110000000}}]}, {$and : [{ts : {$gt : 500000000}}, {ts : {$lte : 510000000}}]}]]}) 

를 ...!

미리 감사드립니다.

답변

2
  1. 범위 기준을 준수 할 가능성이있는 문서가 포함 된 샤드에만 적용됩니다. Mongos는 샤드 키를 쿼리하여 자격이있는 것을 알고 있기 때문에 이것을 결정할 수 있습니다. 무적의 샤드에 대한 쿼리는 병렬로 실행됩니다.
  2. 1)과 동일). 몽고는 이것을 위해 어떤 덩어리인지 알만큼 지성적입니다.
  3. $ 또는의 각 절이 별도로 평가됩니다. 절이 정확히 동일한 쿼리 계획과 청크 범위로 결정되면 결합됩니다. 당신은 sharded 환경에서 쿼리에 대한 explain()을 실행하고 반환 된 정보를 주시하여이를 확인할 수 있습니다. "clauses"객체가 포함되어 있으면 $에있는 모든 절이 아니거나 동일한 쿼리 실행 계획을 사용할 수 있음을 의미합니다.

이론이지만 mongos 쿼리 계획은 약간 일관성이없는 경향이 있습니다. 범위 minkey 50 채 두 파편 각각 다른 51 maxkey 각각에서 "TS"샤드 키와 하나 개의 청크

{$or:[{$and:[{ts:{$gt:90}}, {ts:{$lt:100}}]}, {$and:[{ts:{$gt:91}}, {ts:{$lt:100}}]}]} 

올바르게 제 청크 하나의 검색어에 해결할 것이다이 쿼리 예 . 그러나이 사람은 (두 번째 절에서 90 대신 91의 통지)

{$or:[{$and:[{ts:{$gt:90}}, {ts:{$lt:100}}]}, {$and:[{ts:{$gt:90}}, {ts:{$lt:100}}]}]} 

실제로 당신이 기본적으로 $ 또는 두 개의 조항으로 요구하고 있기 때문에 거의 의미가 모두 파편에 쿼리 초래 정확히 같은. 기본적으로 explain() 및 기타 모니터링 도구를 사용하여 샤딩 환경에서 쿼리가 의도 한대로 작동하는지 확인하십시오.

+0

감사합니다. 매우 유용합니다. 또한 파이썬 스크립트 (http://github.com/mongodb/mongo-snippets/blob/master/sharding/simple-setup.py)를 다운로드하고 다양한 청크 크기로 툴팁을 만들었습니다 ... 전반적으로 공연. 우리가 mongo에서 던지는 시간 시리즈 쿼리의 압도적 인 대다수는 단일 최소/최대 쌍에 한정되어 있으므로 이것이 완벽하게 작동합니다. –