2012-05-04 5 views
1

사용자 환경 설정이있는 mongoDB에 컬렉션이 있습니다. 특정 컬렉션에 매우 많은 수의 개체가 있고 사용자가 컬렉션의 키를 따를 수 있습니다. 예를 들어 :mongo DB 성능 평가

colletionx { key1: value1, key2: value2 : key3: value3 .. keyn:valuen} 

이제 사용자는 키의 수, 즉, 키 1 같을 때 어떤 값이 나 업데이트를 수행 할 수 있습니다. (트위터의 "따라 가기"기능과 매우 비슷합니다.)

어떻게 효율적으로이 작업을 수행 할 수 있습니까?

또한이 같은 쿼리와 몽고를 조회 할 경우 :이 수백만의 사용자가 모두 1 개 쇼를 수행 할 때

db.collection.find({ keyId : 290}) 

또는 db.collection.find({ keyId : { $in [ 290] } })이 급격한 성능 향상이있을 것이다.

답변

1

데이터베이스에 많은 양의 데이터가있는 가장 큰 문제 중 하나는 쿼리 할 때 디스크에 치는 것을 방지하는 것입니다. Mongodb은 메모리에 데이터를 유지하는 일을 상당히 잘 수행하지만 데이터가 메모리를 초과하면 스와핑이 시작되어 성능이 저하됩니다.

쿼리하는 키에 대한 인덱스가있는 한 $eq 쿼리와 $in 쿼리를 수행 할 때 차이가 없어야합니다. 인덱스가 없으면 전체 콜렉션 스캔을 수행합니다.

0

대용량 데이터의 경우 Sharding 을 사용하는 것이 좋습니다. 데이터를 샤드간에 분할 할 수 있으므로 색인이 램 메모리에 맞을 수 있습니다. 나는 인덱스에 의한 findOne이 꽤 효율적이라고 생각한다. 이 경우 성능에 해를 줄 수있는 유일한 방법은 읽기 작업 이외에 대규모 쓰기 작업뿐입니다. mongo에는 전역 잠금이 있으므로