디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

성능좋은 페이지네이션

ㅇㅇ(220.244) 2021.08.14 22:12:58
조회 144 추천 1 댓글 1

아래 링크 참조

https://gall.dcinside.com/board/view/?id=programming&no=1839835


우선 디씨와 같은 방식의 페이지네이션은 아니야

그리고 결국엔 단점도 존재하지

디씨가 어떻게 구현했는지 노무노무 궁금해


내가 생각해낸 방식은 Keyset + Offset이야

Keyset만으로 특정 페이지를 찾아가는것은 불가능해

왜냐하면 중간중간에 글들이 지워지기 때문이지 실제 테이블에서 레코드를 안지우고 is_deleted같은 필드를 지정하더라도 결과는 같아

이유는 알거라고 생각함. 모르면 댓글로 질문


posts 란 테이블이 있고

id INTEGER,

is_deleted BOOLEAN

가 있다고 쳐보자

id는 글 번호 즉 1번부터 시작해서 번호가 클수록 가장 최근 글이지 글이 삭제되더라도 id는 그대로 남아있어



다음 조건으로

- 1페이지당 글이 10개

- 글이 100개 있다고 치면 총 10페이지

- 가장 최근인 1 페이지는 100~91

- 만약 2페이지면 글번호는 90~81

- id 가 key

쿼리는 3개로 이루어져있고 순서는 다음과 같아

1. (is_deleted=false) 인 가장 최근 글을 찾는다

1.1. 그 최근 글에서 가고싶은 페이지의 마지막 글 번호를 얻는다

- 가고싶은 페이지가 3페이지면 마지막 글번호는 80

2. 그 글 번호를 기준으로 이후에 삭제된 글 갯수를 얻는다

- 만약 글 99, 98, 97이 지워졌으면 글번호 80이후 삭제된 글 갯수는 3

3. 글번호 80 에서 삭제된 글 갯수만큰 뺀 Key에서 (80 - 3) 시작해서 삭제되지 않은 글들중 마지막 글 번호를 찾는다 (지워진 레코드수만큼 채워줘야함)

3에서 나온 번호가 내가 찾으려는 페이지중 가장 최근 글이겠지?

그럼 그 번호 기준으로 지워지지 않은 글 10개를 찾으면 그게 해당 페이지인거야


Key는 id기준으로 찾는거니 Keyset 페이지네이션이 아니냐고?

바로 3번 쿼리에서 삭제된 글 수만큼 Offset을 사용할거야

SELECT id FROM posts

WHERE id <= 78 AND is_deleted = false

ORDER BY id

OFFSET 3

LIMIT 1

이러면 2번 페이지의 첫번째 글, 즉 3번 페이지의 마지막 글의 기준이 되는 Key인 id를 알수있지

그럼 그 id를 기준으로 10개를 뽑으면 그게 3번째 페이지가 되는거야.



결국 OFFSET을 쓰면서 그럼 퍼포먼스는 똑같이 않겠냐고?

아니야 왜냐면 요건 OFFSET을 "지워진 글갯수"에 한해서 쓰거든

즉 지워진 글들이 적으면 적을수록 성능은 가장 빠르고

지워진 글들이 늘어나면 늘어날수록 성능은 느려지지


예를 들면

1000만 레코드를 OFFSET으로 페이지네이션 했을때 가장 마지막페이지로 가려면 수초가 걸려.

지워진 글 갯수에 상관없이 수초가 걸리지.


1000만 레코드를 KEYSET+OFFSET으로 페이지네이션 하면

맥북프로 기준으로

지워진 글이 1만개일시 성능은 거의 차이가 없어

지워진 글 10만개정도부터 100ms정도 늘어나고

지워진 글 100만개 됐을때는 1초 안으로 처리되더라고


야갤보면 글이 약 800만개에

지워진 글은 약 5만개 정도인것으로 보여


800만개를 단순 OFFSET으로 페이지네이션 했을때 수초 걸리는걸 생각해보면

OFFSET+KEYSET으로는 지워진글 을 5만개라고 했을때 쿼리당 100ms도 안걸리는걸 알수있지.


나름대로 만족하는 답이야 그래서 이렇게 길게라도 글을 남기는거임


근데 이게 디씨가 사용하는 방식이 아닌 이유는

디씨는 첫페이지나 마지막 페이지나 처리시간이 거의 비슷함.. 그래서 뭔가 다른거라고 생각하는중임.

추천 비추천

1

고정닉 1

1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 비난 여론에도 뻔뻔하게 잘 살 것 같은 스타는? 운영자 24/06/03 - -
1852096 정처기 비전공자가 딸만한가요? ㅇㅇ(110.14) 21.08.25 36 0
1852095 스프링 캐시기능 좀알려줘 형들 [2] 만들자웹(175.215) 21.08.25 46 0
1852094 국비 강의들으면서 [2] ㅇㅇ(211.178) 21.08.25 117 0
1852091 ㅇㅋ 11시 시작 ㅇㅇ(180.71) 21.08.25 17 0
1852090 컴퓨터비전(cv)쪽이 얼마나 레드오션임? [3] ㅇㅇ(125.180) 21.08.25 155 0
1852089 이 갤러리 나이 평균 몇임 [8] ㅇㅇ(125.180) 21.08.25 85 0
1852087 좆소있을땐 입사하고 첫달엔 월급 안주던데 [4] ㅇㅇ(61.76) 21.08.25 85 1
1852086 1년차 연봉 5500충 재택 시작한 부분이구연 [4] ㅇㅇ(1.237) 21.08.25 117 0
1852085 정보보안기사가 it에서 쳐주는 자격증임? [3] ㅇㅇ(223.62) 21.08.25 277 0
1852084 속보] 10년차 이상 개발자 장모 꼰대 논리로 개텀 [3] ㅇㅇ(223.62) 21.08.25 74 0
1852083 여기 애새끼들 왜케 로리콘,페도충이 많냐 ㅇㅇ(125.180) 21.08.25 29 0
1852080 국비충 이클립스 재설치해야함? ㅇㅇ(211.178) 21.08.25 43 0
1852078 입사 3일짼데 회사에서 60마넌 입금해줌 뭐냐 이거 [4] ㅇㅇ(210.222) 21.08.25 90 0
1852077 솔직히 개발만 잘하면 레쥬메 개같이 써도 취업 잘함ㅋㅋㅋ [2] ㅇㅇ(223.38) 21.08.25 114 0
1852076 로지텍 mx keys 쓰시는분 ㅇㅇ(115.145) 21.08.25 64 0
1852073 혼자서 실력 키우기 vs 하루빨리 좆소 입사 [2] ㅇㅇ(202.14) 21.08.25 76 0
1852071 취업할 생각 없으면 비정상임?? [2] ㅇㅇ(210.179) 21.08.25 79 0
1852070 PT면접 주제가 저 ㅇㅇㅇ의 채용을 ㅇㅇㅇ에 제안합니다 인데 [1] ㅇㅇ(175.113) 21.08.25 59 0
1852069 인생에서 후회되는거 ㅇㅇ(220.121) 21.08.25 32 0
1852068 신입 29이면 많이 늦은거임? [2] ㅇㅇ(125.180) 21.08.25 135 0
1852067 리눅스 커스텀했다 [6] ㅇㅇ(125.180) 21.08.25 88 0
1852066 프로그래밍 첨에 입문할때 3년차쯤 되면 적성인지 아닌지 안다는데 [4] ㅇㅇ(121.135) 21.08.25 97 0
1852064 이거 와이라노... [3] ㅇㅇ(220.118) 21.08.25 62 0
1852063 컴공 지식 하나도 모르고 게시판만 짤줄알아도 취업함 ㅇㅇ [2] ㅇㅇ(1.235) 21.08.25 152 0
1852060 요즘 신입 나이 몇살임? [1] ㅇㅇ(39.7) 21.08.25 139 0
1852059 보안쪽 갈거 아닌데 보안기사 따는애들은 뭐임 [1] ㅇㅇ(1.235) 21.08.25 88 0
1852057 진지하게 고민중이다... 이 길이 내 길이 맞는걸까 [4] ㅇㅇ(182.219) 21.08.25 152 0
1852056 반복문이용해서 게이찾기하려면 어케함? ㅇㅇ(118.235) 21.08.25 30 0
1852055 모르는거 있으면 스택오버플로우 같은데서 조낸 찾은담에 [2] ㅇㅇ(64.180) 21.08.25 49 0
1852054 연봉질문 [1] 하이(210.121) 21.08.25 91 0
1852053 포렌식 돌릴려면 루팅필수냐 ? [1] ㅇㅇ(175.123) 21.08.25 49 0
1852051 학부때 안드로이드 스튜디오 잼게해봤는데 맥북사서 ios 공부하는건 별로? [1] Oo(118.235) 21.08.25 138 0
1852050 질문 하고 싶으면 남 눈치 보지말고해라 ㅇㅅㅇ [6] ♨2.87™갤로그로 이동합니다. 21.08.25 79 0
1852049 요즘 딱국 어디감? [3] ㅇㅇ(118.235) 21.08.25 124 12
1852048 아침을 여는 피자 ㅇㅇ(180.71) 21.08.25 28 0
1852047 국비 비대면 화상캠 필요함? [1] ㅇㅇ(223.38) 21.08.25 107 0
1852046 국비 병신새끼 한명이 존나 질문하네 [5] ㅇㅇ(117.111) 21.08.25 182 1
1852045 국비는 하루 복습 5시간해도 3000못넘김 [4] ㅇㅇ(223.39) 21.08.25 201 3
1852044 음 이제 어느정도 시스템을 갖추었군 ㅇㅇ(180.71) 21.08.25 32 0
1852042 게임실행파일 UI랑 코딩 가혹하게 평가해주실분.... 브레이버(175.196) 21.08.25 60 0
1852040 si 돈만 보면 나쁘지않음 [2] ㅇㅇ(220.88) 21.08.25 162 10
1852039 오늘이 무슨날인지 알고 프갤하냐? [2] ㅇㅇ(39.7) 21.08.25 87 0
1852038 공무원이 ㄹㅇ 최고긴하네.. ㅇㅇ(223.38) 21.08.25 80 0
1852037 카카오 코테 다 맞출 수준이면 SCPC 수상가능? ㅇㅇ(118.235) 21.08.25 188 0
1852035 인앱결제금지법 통과됐다고 함 ㄷㄷ [2] 헬마스터갤로그로 이동합니다. 21.08.25 122 1
1852033 화상강의할때 이쁜여자 얼굴 봐도되? [7] ㅇㅇ(61.76) 21.08.25 93 0
1852032 님들 나이 50줄돼서도 새 언어배울 자신있음? [4] ㅇㅇ(223.38) 21.08.25 114 0
1852031 창업지원센터 안에 회사 겪어본 썰 [23] ㅇㅇ(223.62) 21.08.25 1591 27
1852029 이직준비 너무 힘든데 퇴사먼저 할까 [3] ㅇㅇ(112.161) 21.08.25 120 2
1852028 일본에서 가장 꼴보기 싫은 외국놈들 [3] 프로외노자갤로그로 이동합니다. 21.08.25 226 5
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2