찾다

 >  Q&A  >  본문

MongoDB中数据量大的话,不推荐使用 skip 和 limit,那其它方式怎么实现?

  1. 如题,我前两天去参加 MongoDB 用户组交流会时,听讲师说到数据量大的话不要使用 skip 和 limit
    因为,这样会一行一行的数到想到的页数再取 PageSize 的数量。当然他们也提了另外一个方法,但是只略讲了一句。

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

迷茫迷茫2804일 전648

모든 응답(2)나는 대답할 것이다

  • 大家讲道理

    大家讲道理2017-04-24 09:12:31

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-24 09:12:31

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

    회신하다
    0
  • 취소회신하다