연산자 성능에서 Mongo $
사용 속도가 느리거나 불량한 형태입니까?$in
MongoDB의 운영자는 많은 가능성을 가지고 있습니까?
posts.find({
author : {
$in : ['friend1','friend2','friend3'....'friend40']
}
})
예를 들어 앱 엔진은 IN 배열의 항목당 하나의 쿼리로 바로 변환되므로 30개 이상을 사용할 수 없으며 대신 팬 아웃 처리 방법을 사용하도록 강제합니다.그것이 Mongo에서도 가장 효율적인 방법일 수 있지만, 코드가 훨씬 더 복잡하기 때문에 저는 그냥 이 일반적인 방법을 사용하고 싶습니다.
Mongo가 이것들을 실행할까요?$in
적절한 크기의 데이터셋을 효율적으로 조회할 수 있습니까?
작은 목록(작은 것이 무엇인지 말하기 어렵지만 적어도 수십/수백 개)을 사용하면 상당히 효율적일 수 있습니다.$in
mongodb는 실제 btree 인덱스를 가지고 있고 큰 테이블과 같은 컬럼 스토어가 아니기 때문에 앱 엔진처럼 작동하지 않습니다.
와 함께$in
일치하는 문서를 찾기 위해 색인에서 건너뛰거나, 사용할 색인이 없는 경우 전체 모음을 차례로 이동합니다.
에서 인덱스를 생성했다고 가정합니다.author
필드, 알고리즘 관점에서, 시간 복잡도$in
작업:$(N*log(M))
,어디에N
입력 배열의 길이입니다.M
컬렉션의 크기입니다.
의 시간 복잡성$in
데이터베이스를 변경하지 않으면 작업이 변경되지 않습니다(비록 어떤 DB도 파손될 수 없다고 생각하지만).O(N*log(M))
).
그러나, 공학적 관점에서, 만약N
비즈니스 로직 서버가 시뮬레이션을 수행할 수 있도록 하는 것이 좋습니다.$in
배치별 또는 하나씩 작업.
이는 데이터베이스 서버의 메모리가 비즈니스 로직 서버의 메모리보다 훨씬 더 가치 있기 때문입니다.
인덱스를 작성하는 경우(확인)목록 요소에서 인덱스)는 상당히 빠를 것입니다.
사용해 보셨습니까?explain()
http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-Use%7B%7Bexplain%7D%7D 에서 질문을 프로파일링할 수 있는 좋은 기본 제공 방법입니다.
언급URL : https://stackoverflow.com/questions/4955160/mongo-in-operator-performance
'programing' 카테고리의 다른 글
트랜잭션 범위를 올바르게 사용하는 방법 (0) | 2023.05.22 |
---|---|
덱스를 실행할 수 없음: 여러 개의 덱스 파일이 Lcom/myapp/R$ 어레이를 정의합니다. (0) | 2023.05.22 |
Git에서 저자와 커미셔너의 차이점은 무엇입니까? (0) | 2023.05.22 |
*모든* Excel interop 개체를 마샬을 사용하여 해제해야 합니까?ReleaseComObject? (0) | 2023.05.22 |
왜 제가 "git push --setupstream origin"을 해야 합니까? (0) | 2023.05.22 |