2012-08-03 5 views
1

"pageable"데이터베이스의 결과 집합을 만드는 데 관련된 원칙이나 구현은 무엇입니까?웹 페이지에서 페이징은 어떻게 작동합니까?

백만 건의 레코드를 메모리에 저장하지 않고 페이지를 넘길 수 있습니까? 100 페이지가있을 때 5에서 50 페이지 번호로 "점프"할 수 있습니까?

페이징 수행 방법에 대한 의사 코드 종류의 설명을 찾고 있습니다.

답변

1

기본 전제는 다음과 같은 기억하는 것입니다

  1. 페이지 (PAGE_SIZE)
  2. 당 레코드 수는 집합에있는 레코드의 총 수를 알고 즉 당신의 페이지 크기를 정의합니다. 그런 다음 얼마나 많은 페이지가 있는지 계산할 수 있습니다. var numPages = totalNumRecords/PAGE_SIZE;
  3. Page = 1
  4. 이/간단한 건너 뛰기를 수행하여 다음과 같이 알고리즘을 가지고 당신이
Skip((page - 1)*PAGE_SIZE).Take(PAGE_SIZE);가 가

그래서 무슨 일이 일어날 지입니다

페이지로 필요한 요소가 즉, 페이지 번호를 추적 할 변수를 사용하여 결과에 대한 데이터 소스에 도달하면 원하는 레코드 집합으로 건너 뛰고 지정된 금액을 가져옵니다. 희망적으로 이것은 의미가 있습니다.

+0

아. 말이된다. 나는 내가 생각한 프로세스로 어디로 가고 있는지 추측했다. 데이터베이스 레벨에서 "건너 뛴다"는 것이 얼마나 효율적 이었는가하는 것이었지만, 나는 그 질문을 언급하지 않았다. 나는 데이터베이스가 똑똑하다고 생각합니다! – Zabba

+0

집합 기반 접근 방식을 사용하여 데이터베이스에서 쉽게 수행 할 수 있습니다. 그래서 여전히 고효율 일 수 있습니다. 건너 뛰기를 받기 위해 쿼리를 설정하고 제공된 알고리즘을 기반으로 값을 가져와 결과를 얻으려면'SQL'을 사용해야합니다 –

1

일반적으로 다음 단추의 URL에는 페이지를 렌더링하는 데이터베이스 쿼리를 수정하는 내용이 있습니다. 그런 다음 렌더링 된 페이지가 다음 URL의 색인을 범프합니다.

그래서 페이지 하나가 LIMIT (20)이있는 SQL 요청 수 있습니다, 2 페이지는 LIMIT (20)을 가지고뿐만 아니라 OFFSET (20)

그래서 기본적으로 20 항목은 해당 모델에 한 번에로드되지만, 또한 페이지 너무 많은 항목이 너무 많이 오프셋되어로드되고 "다음 페이지"URL이 변경됩니다.

일반적으로 페이지가 다음 링크를 표시해야하는지 여부를 알 수 있도록 총 항목 수에 상대적인 위치를 확인하는 기능도 있습니다.

관련 문제