> 웹 프론트엔드 > JS 튜토리얼 > 순서 지정을 통한 순방향 페이지 매김이 MongoDB의 페이지 매김 제한을 제거할 수 있습니까?

순서 지정을 통한 순방향 페이지 매김이 MongoDB의 페이지 매김 제한을 제거할 수 있습니까?

DDD
풀어 주다: 2024-10-24 06:31:02
원래의
258명이 탐색했습니다.

Can Forward-Only Pagination with Ordering Eliminate MongoDB's Pagination Limitations?

MongoDB의 페이지 매김 기술: Skip()의 한계를 넘어서

MongoDB의 Skip() 메소드에 의존하는 것은 널리 알려져 있습니다. 페이지 매김은 데이터가 증가함에 따라 성능 문제로 이어질 수 있습니다. 이 문제를 해결하기 위한 대안적인 접근 방식은 페이지 매김을 위해 _id 필드의 자연 순서를 활용하는 것입니다.

마지막 문서의 ID

이 기술의 핵심은 다음에 있습니다. 이전 페이지에서 마지막 문서의 ID를 결정한 후 다음 페이지의 시작점으로 사용합니다. 그러나 초보자의 경우 마지막 ID를 식별하는 것이 어려울 수 있습니다.

_id 순서를 사용한 정방향 페이지 매김

뒤방향 페이지 매김 또는 특정 페이지로 건너뛰기가 불가능한 시나리오의 경우 필요하다면 "포워드 페이징(forward paging)"이라는 개념을 사용할 수 있습니다. 이 기술에는 커서를 반복하고 후속 쿼리를 위해 마지막으로 본 문서의 _id를 저장하는 작업이 포함됩니다.

_id 순서 지정의 예:

cursor = db.junk.find().limit(3);

while (cursor.hasNext()) {
   doc = cursor.next();
   if (!cursor.hasNext())
     lastSeen = doc._id;
}
로그인 후 복사

복잡한 순서 지정

_id 외에 다른 주문 필드를 사용하면 추가적인 복잡성이 발생합니다. 개념은 동일하지만 $nin 연산자를 사용하여 이전에 본 문서를 제외해야 합니다.

순위 순서의 예:

seenIds = [];
cursor = db.junk.find({ "_id": { "$nin": seenIds }, "rank": "$lte": lastSeen }
).sort({ "rank": -1 }).limit(2);

while (cursor.hasNext()) {
   doc = cursor.next();
   seenIds.push(doc._id);
   if (!cursor.hasNext() || lastSeen == null)
     lastSeen = doc.rank;
}
로그인 후 복사

결론:

앞으로 페이징은 뒤로 페이지 매김이 필요하지 않은 시나리오에서 실행 가능한 옵션입니다. $nin 연산자를 활용하고 표시된 문서 ID를 관리함으로써 이 기술은 Skip()과 관련된 메모리 소비 문제 없이 효율적인 페이지 매김을 제공합니다.

위 내용은 순서 지정을 통한 순방향 페이지 매김이 MongoDB의 페이지 매김 제한을 제거할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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