dev.Log

커서기반 페이지네이션 본문

BACKEND.*

커서기반 페이지네이션

초코푸딩 2020. 7. 8. 22:56

Pagination의 두가지 처리

1.오프셋 기반 페이지네이션 : DB의 offset 쿼리를 사용하여 페이지 단위로 요청/ 응답하게 구현

2.커서 기반 페이지네이션 : 클라이언트가 가져간 마지막 row의 순서상 다음 row들을 n개 요청, 응답하게 구현

 

<오프셋 기반 페이지네이션의 문제>

My SQL

SELECT id FROM `post` ORDER BY id DESC LIMIT 20, 40

Oracle

select * from (" + "	select rownum num, N.*"
				+ "	from (select * from post where use_yn = 1 order by post_id desc) N" + ") 
                where num between ? and ?";

문제1. 각각의 페이지를 요청하는 사이에 데이터의 변화가 있는 경우 중복 데이터 노출

문제2. 대부분의 RDBMS에서 OFFSET 쿼리의 퍼포먼스 이슈

 

오프셋기반은 원하는 데이터가 몇 번째 있는가가 중요!

<커서 기반 페이지네이션> : 어떤 데이터의 다음에 있는가가 중요!

 

 

'BACKEND.*' 카테고리의 다른 글

beanconfig 예제  (0) 2020.07.09
DI 기초예제  (0) 2020.07.08
코드 커버리지  (0) 2020.07.07
sql dummy data 생성하기  (1) 2020.07.07
proxy로 aop 구현  (0) 2020.07.06
Comments