일람 화면의 페이지를 나누는 것에 대해 많은 고려를 하였다
3848 단어 MySQLSQLarchitecturepaging
페이지 나누기 처리에 관한 고찰을 총결하였다.
페이지 나누기
사용자 페이지
다 필요 없어요.
인류가 처리할 수 있는 데이터의 수량은 유한하다.
구글 등에서 100만 건을 검색해도 모두 보는 사람은 없다.인류가 조작한 화면을 열람하는 데는 거의 모든 데이터가 필요하지 않다.따라서 한 번 표시된 데이터를 줄여 사용자와 성능을 모두 우수한 화면으로 만들 수 있다.
페이지 나누기
페이지별로 사람이 한 번에 처리하기 쉬운 양을 표시합니다.나는 개인적으로 페이지당 10줄에서 100줄 정도가 비교적 처리하기 쉽다고 생각한다.
1페이지에 1-10이 표시되면 2페이지에 11-20이 표시됩니다.
성능 페이지
페이지 수를 계산하려면 계수가 필요하다
이곳의 문제는 페이지 수를 파악하려면 모든 것을 계산해야 한다는 것이다.건수는 검색 조건에 따라 동태적으로 변하기 때문에 매번 계수가 필요하다.실제로 볼 수 없는 수만 건을 계산하기 위해 성능이 떨어지는 것을 피하려고 한다.
페이지 제한 사항
모든 성능이 떨어지는 계수를 줄이기 위해 계수 포획 기록을 한 번 제한합니다.상기 예에서 100件10ページ=1000件
.이 상한선은 요구 사항과 데이터베이스 성능(계수, 모든 추출)에 따라 조정할 수 있습니다.이 제한을 초과하여 얻을 수 있는 페이지 수를 요구하는 경우 다음 페이지 집합을 다시 계산하십시오.
SQLDB의 경우
ySQL(LIMIT 자구 사용)
http://dev.mysql.com/doc/refman/5.7/en/select.html
PostgreSQL(LIMIT OFFSET 사용)
https://www.postgresql.jp/document/9.2/html/queries-limit.html
Oracle 사용(ROWNUM BETWEEN)
http://otn.oracle.co.jp/otn_pl/otn_tool/code_detail?n_code_id=106
계산하다
페이지 수
페이지 수의 계산은 일반적으로 나눗셈인데, 끝은 평가절상 (천장 함수) 이다.
ページ数[pages] = ceil( データ数[records] / 1ページあたりの表示数[records/page] )
예를 들어 512건의 경우 20건당 26페이지가 있다.데이터 오프셋
페이지별 오프셋 (페이지 시작 레코드 위치) 은 1부터 페이지 번호로 설정됩니다.
オフセットページ数[pages] = ページ番号 - 1
オフセットレコード数[records] = オフセットページ数[pages] × 1ページあたりの表示数[records/page]
예를 들어 128건에 대해 20건당 3페이지가 40건으로 41~60건, 7페이지가 121~128건이다.페이지 오프셋 표시
표시할 페이지 수도 최대로 설정하고 최대 페이지 수에 도달하면 다음 페이지 번호를 표시합니다.
現在ページのオフセット = 現在のページ番号- ceil(最大表示ページ数 / 2)
現在ページのオフセット < 0 の場合は現在ページのオフセット = 0
最大表示ページ = 現在ページのオフセット + 最大表示ページ数
最大表示ページ > 全ページ数 の場合は、最大表示ページ = 全ページ数分まで
찾은 건수
最大ページセット= ceil(最大表示ページ / 最大表示ページ数)
최대 페이지 세트 레코드 수 <페이지당 표시 횟수(最大ページセット -1) × 1ページあたりの表示数 + 最大ページセットのレコード数
최대 페이지 세트 레코드 수 ≥ 페이지 당 표시 수 시最大レコード数 = 最大ページセット × 1ページあたりの表示数 ※続きがあるかもしれないので、この件数以上
1페이지 3건, 최대 5페이지 총 32건의 경우
포기하다
CSV 다운로드
페이지 나누기 성능 정책을 사용할 수 없을 수도 있습니다.예를 들어, CSV에서 다운로드하는 경우.CSV를 다운로드한 사용자는 대부분 "다른 시스템에 들어가고 싶다", "Excel로 열고 싶다"는 상황이어서 파일을 분할하고 싶지 않다.
이런 상황에서 페이지 나누기를 포기하고 무거운 데이터베이스 처리를 허용하거나 다운로드하지 못하게 해야 한다.
더럽히다
페이지 전환에서 페이지를 재현하려면 모든 페이지의 데이터를 보존해야 합니다.그러나 데이터량이 너무 많아 페이지를 나눠야 한다면 메모리에 저장하는 것은 비현실적이다.
그럼에도 불구하고 DB에서 재현하려면 두 번째 페이지를 읽을 때 데이터가 업데이트되어 바뀌는 경우가 있다.열람 중에도 계속 잠길 수 없기 때문에 이 경우 더러운 읽기 허용을 포기한다.
워낙 일이 많아요.
만약 업무가 너무 격렬하다면, 일부 데이터가 있는 페이지는 예상대로 작동하지 못할 수도 있습니다. 예를 들어 다른 페이지가 될 수도 있습니다.
생성, 업데이트 시간대를 지정하여 검색하거나 각 시간대의 페이지에 비교적 현실적으로 표시합니다.
시간대에 잘라내면 스크롤 창도 손입니다.(캐릭터 창은 머지않아 투고될 것이다.)
Reference
이 문제에 관하여(일람 화면의 페이지를 나누는 것에 대해 많은 고려를 하였다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/egnr-in-6matroom/items/e1beba82d5dc76c85596텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)