DB

[DB]커서 페이징과 오프셋 페이징

마디니 2022. 3. 15. 21:05
반응형

커서 페이징

  • cursor를 사용하여 사용자에게 응답한 마지막 데이터를 기준으로 다음 데이터를 요청하고 응답하는 방법
  • 실시간 데이터와 대량의 데이터를 다룰때 사용되는 페이징 방법이다. (무한스크롤)
  • 커서 기반으로 현재 커서의 다음 데이터를 요청하기 때문에 데이터 누락이나 중복 문제가 없다.
  • 커서로 활용할 컬럼은 인덱스가 설정되어 있어야 하고 고유해야 한다.
  • 2개 이상의 커서 값을 사용한다면 어느정도 데이터양 까지는 오프셋 기반의 퍼포먼스가 더 좋다.
  • 커서가 순차적이어야 한다.

오프셋 페이징

  • DB의 offset쿼리를 사용하여 페이지 단위로 구분하여 요청하고 응답하는 방법
  • 요청한 데이터를 바로 조회하는 것이 아니라, 이전의 데이터를 모두 조회한 후 그 resultSet에서 오프셋을 조건으로 잘라내는 방법
  • 오프셋 숫자가 커질수록 퍼포먼스가 낮아진다.
  • (100만건의 데이터가 있는데 50만번째 페이지에 있는 값을 찾는다면 offset만큼 건너 뛰는데에 많은 시간이 소요된다.)
  • 중복 데이터 노출의 문제가 있다.
  • (예를 들어 최신순으로 정렬된 게시판 페이지에서 사용자가 1페이지에서 10개 게시글 리스트를 보고 있다고 하자. 그 사이에 5개의 신규 게시글이 등록된다면, 사용자가 2페이지를 눌렀을때 1페이지에 봤던 마지막 5개의 게시글을 다시 2페이지에서 볼 수 있다.)
반응형