> 백엔드 개발 > Golang > 대규모 결과 세트에 대해 mgo.v2를 사용하여 MongoDB에서 효율적인 페이징을 어떻게 구현할 수 있습니까?

대규모 결과 세트에 대해 mgo.v2를 사용하여 MongoDB에서 효율적인 페이징을 어떻게 구현할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-30 02:12:11
원래의
618명이 탐색했습니다.

How Can I Implement Efficient Paging in MongoDB with mgo.v2 for Large Result Sets?

사용자 정의 커서 관리와 함께 mgo를 사용하는 MongoDB의 효율적인 페이징

문제:

mgo하는 동안 .v2는 내장된 페이징 방법을 제공합니다. (Query.Skip() 및 Query.Limit()), 첫 번째 x개 문서(Skip()로 결정됨)를 건너뛰기 전에 모든 문서를 반복해야 하기 때문에 큰 결과 목록에는 비효율적입니다.

해결책:

MongoDB는 원하는 결과로 점프할 수 있는cursor.min()을 제공하여 처리되는 문서 수를 줄입니다. 그러나 mgo.v2에는cursor.min()을 지정하는 기본 지원이 부족합니다.

Database.Run() 및 Find Command:

cursor.min()을 활용하려면 기본 지원 없이 Database.Run()을 사용하여 사용자 정의 쿼리로 find 명령을 실행할 수 있습니다. 여기서 min 인수를 지정하여 원하는 시작 인덱스를 나타냅니다. 항목.

커서 데이터 인코딩:

쿼리를 실행한 후 결과의 첫 번째 배치에서 커서 데이터를 가져와야 합니다. 이 데이터를 효율적으로 저장하고 전송하기 위해 base64 인코딩과 결합된 bson.Marshal()을 사용하여 웹 안전 커서 문자열을 생성할 수 있습니다.

커서 관리:

페이지 간 커서를 관리하기 위해 각각 base64 및 bson 인코딩을 사용하여 디코딩하고 다시 인코딩할 수 있습니다. 이렇게 하면 중단한 부분부터 쿼리를 다시 시작할 수 있습니다.

github.com/icza/minquery 사용:

또는 minquery 패키지를 사용할 수도 있습니다. 커서 사양을 사용하여 MongoDB 찾기 명령을 구성하고 실행하는 래퍼를 제공합니다. 페이지 간 커서 관리 프로세스를 단순화합니다.

코드 조각:

맞춤형 커서 관리(수동 접근 방식):

query := mgo.Query{
    Limit: 10,
}

if min != nil {
    query = query.Skip(1).Min(min)
}
로그인 후 복사

minquery 패키지 접근 방식:

query := minquery.New().
    Cursor(cursor).
    Limit(10)
로그인 후 복사

위 내용은 대규모 결과 세트에 대해 mgo.v2를 사용하여 MongoDB에서 효율적인 페이징을 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿