[MONGODB] 몽고는 운영자 성능에 $
MONGODB몽고는 운영자 성능에 $
그것은 느린 / 가능성의 큰 배열과 MongoDB를에 운영자에 $를 사용하는 가난한 형태는?
posts.find({
author : {
$in : ['friend1','friend2','friend3'....'friend40']
}
})
App Engine은, 예를 들어, 그들은 IN 배열에 항목 당 직접 하나 개의 쿼리를 번역, 그래서 대신 팬을 처리하기 위해 자신의 방법을 사용하여에 강제 때문에 30보다 더 많은 사용하지 않습니다. 아마 그게 몽고에서 가장 효율적인 방법도 그것을위한 코드가 훨씬 더 복잡하지만 난 그냥이 일반적인 방법을 사용하는 것을 선호 것 때문에.
몽고는 적당한 크기의 데이터 세트를 효율적으로 쿼리에서 이러한 $를 실행할 것인가?
해결법
-
==============================
1.그것은 작은 목록과 매우 효율적 (작은이 무엇인지 말을 열심히하지만, 수십 / 수백에 적어도) $에의 할 수 있습니다. MongoDB를 실제 BTREE 인덱스를 가지고에서 Bigtable과 같은 열 저장하지 않기 때문에이 앱 엔진처럼 작동하지 않습니다.
그것은 작은 목록과 매우 효율적 (작은이 무엇인지 말을 열심히하지만, 수십 / 수백에 적어도) $에의 할 수 있습니다. MongoDB를 실제 BTREE 인덱스를 가지고에서 Bigtable과 같은 열 저장하지 않기 때문에이 앱 엔진처럼 작동하지 않습니다.
$로 그것은 일치하는 문서를 찾기 위해 인덱스에 주위를 건너 뜁니다에, 또는 사용에 대한 인덱스가없는 경우 전체 컬렉션을 걷는다.
-
==============================
2.사용자가 뷰 알고리즘의 관점에서, 저자 필드 인덱스를 작성한 가정 동작 $의 시간 복잡도는 : $ (N * 로그 (M)) N 입력 배열의 길이이고, M은의 크기, 수집.
사용자가 뷰 알고리즘의 관점에서, 저자 필드 인덱스를 작성한 가정 동작 $의 시간 복잡도는 : $ (N * 로그 (M)) N 입력 배열의 길이이고, M은의 크기, 수집.
데이터베이스를 변경하지 않는 한 (내가 어떤 DB는 O (N을 깰 수 있다고 생각하지 않습니다하지만 * 로그 (M))) 작업에 $의 시간 복잡도는 변경되지 않습니다.
N은 큰 숫자로가는 경우,보기의 엔지니어링 지점에서, 하나 배치 또는 하나씩으로, 동작에 $를 시뮬레이션하는 비즈니스 로직 서버를하도록하는 것이 좋습니다.
데이터베이스 서버의 메모리가 비즈니스 로직 서버의 메모리보다 훨씬 더 가치 : 이것은 단순히 때문입니다.
-
==============================
3.당신은 목록 요소의 인덱스 (ensureIndex)를 빌드하는 경우, 그것은 꽤 빨리해야합니다.
당신은 목록 요소의 인덱스 (ensureIndex)를 빌드하는 경우, 그것은 꽤 빨리해야합니다.
당신은 Explain을 사용하여 시도 해 봤나 ()? 그것의 좋은가 내장 된 방식으로 쿼리를 프로파일 : http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-Use%7B%7Bexplain%7D%7D.
from https://stackoverflow.com/questions/4955160/mongo-in-operator-performance by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 봄의 데이터 MongoDB를 : MappingMongoConverter의 제거 _class (0) | 2019.12.17 |
---|---|
[MONGODB] {발견} 속도 대 MongoDB를 {집계 $ 일치} (0) | 2019.12.17 |
[MONGODB] "ID"와 "_id"필드 MongoDB의에서 차이 (0) | 2019.12.17 |
[MONGODB] MongoDB를 가진 고유 ID (0) | 2019.12.17 |
[MONGODB] MongoDB를에 정렬 사례를 구분 (0) | 2019.12.17 |