오프셋 기반의 페이징 구현 : 마지막 페이지를 구하기 위해 전체 갯수를 알아야 함
- 전체 페이지의 크기가 클수록 전체 사이즈를 구하는 것 자체가 큰 부하가 될 수 있음
- 실제 대용량 데이터를 제공하는 서비스를 본다면, 마지막 페이지에 대한 접근을 막거나 무한 스크롤 형태로 제공
- 그 외에도 쿼리를 보낼 때, offset과 limit의 쿼리를 사용
- 4번 Offset부터 시작하기 위해 0~3번 Offset까지 데이터를 다시 읽음
- 4번 Offset부터 size만큼 반환
- 실제로 반환하는 데이터는 2개인데, 반환하는 2개의 데이터를 읽기까지 4개의 데이터를 읽고 버리게 된다. **(**지금은 Offset이 작기때문에 4개만 버리지만, 실제로는 Offset 사이즈가 커지면 커질수록 버려지는 데이터들이 훨씬 많다)
따라서 데이터 사이즈가 커질 수록 페이지네이션 방식은 다른 방식에 비해 훨씬 불리한 방식이다. → 대안으로 커서 기반 페이징
커서 기반 페이징
오프셋 기반의 페이징에서는 페이지 번호를 줬지만, 커서 기반 페이징에서는 key를 준다.
- 예시의 요청은 key 4, size 2이므로 4번부터 2개를 달라는 요청
4번 이전의 데이터를 보지 않고, 4번 이후의 데이터부터 데이터를 읽어서 사이즈만큼의 데이터를 찾아 반환함
- 서버는 마지막 key 번호를 클라이언트에게 준다. (다음 요청시에 클라이언트가 사용함)
따라서 커서 기반 페이징은 키를 기준으로 데이터 탐색범위를 최소화
→ 하지만, 커서 기반 페이징은 전체 데이터를 조회하지 않기 때문에 아래 UI 구현이 어려움
상황에 따라 페이지네이션 방식을 고집해야 할 수도 있고, 페이지네이션 기반의 부하 문제를 해결할 솔루션으로 커서 기반 페이징을 사용하기도 하지만, 대안이 1개만 있는 것은 아님
2023 KAKAO Tech Campus_BackEnd 필수 과정
DB(MySQL) 강의 정리 내용입니다.
'🔍 CS > 데이터베이스' 카테고리의 다른 글
타임라인 최적화 - 01. 타임라인이란? (0) | 2023.06.06 |
---|---|
페이지네이션 최적화 - 05. 커버링 인덱스 (0) | 2023.06.06 |
페이지네이션 최적화 - 01. 페이지네이션이란 (0) | 2023.06.06 |
조회 최적화를 위한 인덱스 이해하기 - 08. 인덱스를 다룰 때 주의해야 할 점 (0) | 2023.06.04 |
조회 최적화를 위한 인덱스 이해하기 - 04. 클러스터 인덱스 (0) | 2023.06.04 |