source

MongoDB {aggregation $match} 대 {find} 속도

manycodes 2023. 4. 1. 09:39
반응형

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

반응형