MongoDB {aggregation $match} 대 {find} 속도
수백만 개의 행이 있는 mongoDB 컬렉션이 있으며 쿼리를 최적화하려고 합니다.현재 집계 프레임워크를 사용하여 데이터를 검색하여 원하는 대로 그룹화하고 있습니다.일반적인 집약 쿼리는 다음과 같습니다.$match > $group > $ group > $project
다만, 마지막 부분은 몇 밀리초 밖에 걸리지 않는 것을 알 수 있었습니다.처음이 가장 느립니다.
$match 필터만으로 쿼리를 실행하고 collection.find에서도 동일한 쿼리를 실행하려고 했습니다.집약 쿼리는 80밀리초까지 걸리는 반면 찾기 쿼리는 0밀리초 또는 1밀리초 걸립니다.
각 분야별로 인덱스를 거의 다 가지고 있기 때문에, 이것은 문제가 되지 않는 것 같습니다.뭐가 잘못될 수 있는지 아는 게 있나요?아니면 단순히 어그리게이션 프레임워크의 '정상적인' 결점일까요?
쿼리 할 수 후 많은 이 는 '어그리게이션쿼리'를 사용하여 할 수 있습니다.$group
어그리게이션의 틀을 유지하는 것이 좋습니다.
감사해요.
편집:
제 기준은 다음과 같습니다.
{
"action" : "click",
"timestamp" : {
"$gt" : ISODate("2015-01-01T00:00:00Z"),
"$lt" : ISODate("2015-02-011T00:00:00Z")
},
"itemId" : "5"
}
「 」의 .aggregation framework
는 다수의 엔트리에 대한 쿼리를 용이하게 하고 사용자에게 가치가 있는 적은 수의 결과를 생성하는 것입니다.
여러 번 사용할 수 .find
새로운 할 수 .find
에 한편,,는$group
할 수 있습니다.stage는 새로운 필드입니다.
「」의을 .aggregation framework
아마 첫 할 것 find
(또는 여러 개의 체인 연결), 해당 정보를 끌어다가 프로그래밍 언어로 더 조작합니다.
aggregation pipeline
시간이 더 걸릴 수도 있지만 적어도 MongoDB 엔진이라는 한 시스템의 성능만 고려하면 됩니다.
「」로부터는,find
쿼리, 프로그래밍 언어로 데이터를 더 조작해야 할 가능성이 높기 때문에 선택한 프로그래밍 언어의 복잡성에 따라 복잡성이 높아집니다.
검색 쿼리에 explain()을 사용해 본 적이 있습니까?find() 쿼리에 정확히 얼마나 시간이 걸리는지 알 수 있습니다.$match와 $desplain에 대해 동일한 작업을 수행할 수 있으며 인덱스 액세스 및 기타 파라미터에 차이가 있는지 확인할 수 있습니다.
또한 집약 프레임워크의 $group 부분은 인덱스를 사용하지 않기 때문에 집약 프레임워크의 $match 단계에서 반환되는 모든 레코드를 처리해야 합니다.따라서 쿼리의 동작을 더 잘 이해하려면 반환되는 결과 세트와 MongoDB에 의해 처리되는 메모리에 적합한지 여부를 확인하십시오.
퍼포먼스에 관심이 있는 경우, 집계는 확실히 find 조항이 아니라 작업 시간이 걸립니다.검색, 그룹화 및 제한된 레코드(페이지 표시)를 가진 여러 조건에서 레코드를 가져오는 경우 aggregate를 사용하는 것이 가장 좋습니다.한편 find 쿼리는 매우 큰 데이터 세트를 가져와야 할 경우 빠릅니다.모집단, 투영, 페이지 번호 부여 없음 빠른 검색 쿼리를 사용할 것을 제안합니다.
언급URL : https://stackoverflow.com/questions/28364319/mongodb-aggregation-match-vs-find-speed
'source' 카테고리의 다른 글
새 속성 값을 사용하여 프로그래밍 방식으로 WooCommerce 제품 변형을 생성합니다. (0) | 2023.04.06 |
---|---|
유레카와 쿠베르네테스 (0) | 2023.04.01 |
모바일에서 리액트 앱 미리보기를 만드는 방법 (0) | 2023.04.01 |
플러그인 개발 중 Wordpress 오류 - "이 페이지에 액세스할 수 있는 충분한 권한이 없습니다." (0) | 2023.04.01 |
Gravity Forms 사용자 지정 유효성 검사 필터 (0) | 2023.04.01 |