MongoDB中数据量大的话,不推荐使用 skip 和 limit,那其它方式怎么实现?
迷茫
迷茫 2017-04-24 09:10:31
0
2
630
  1. 如题,我前两天去参加 MongoDB 用户组交流会时,听讲师说到数据量大的话不要使用 skip 和 limit
    因为,这样会一行一行的数到想到的页数再取 PageSize 的数量。当然他们也提了另外一个方法,但是只略讲了一句。

    我在这里提问是想知道具体怎么做?求思路。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

모든 응답(2)
大家讲道理

"다음 페이지" 또는 "이전 페이지"를 가져오려면 특정 _id보다 큰 sort+limit를 쿼리하면 됩니다.
"페이지 xxx"를 얻으려면 완전히 정확하고 싶다면 실제로는 좋은 방법이 없습니다. 페이징 자체는 "하나씩 계산" 논리이므로 시간이 많이 걸리는 프로세스는 여부에 관계없이 피할 수 없습니다. 인덱스가 있습니다.
페이지 수가 매우 많으면 수천만 이후의 숫자에 관심을 두는 사람은 많지 않습니다. redis를 사용하여 페이지 번호별로 _id 목록을 캐시하고 가끔씩 업데이트할 수 있습니다.
이 문제의 근본적인 요점은 "지수가 의존하는 b+ 구조는 순위 계산에 사용할 수 없습니다."입니다.

Ty80

마지막 쿼리의 마지막 _id를 기록하면 다음 쿼리는 {_id: {$gt: last_id}}가 됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿