디시인사이드 갤러리

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

갤러리 본문 영역

성능좋은 페이지네이션

ㅇㅇ(220.244) 2021.08.14 22:12:58
조회 145 추천 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 - -
1852219 계속 아프면 내일 사러 가야겠다 [1] ㅇㅇ(180.71) 21.08.25 19 0
1852218 진경제 샀어야 했는데 흐음 ㅇㅇ(180.71) 21.08.25 23 0
1852216 울나라 SI 개판은 조선식 갑질 계약 때문인데 ㅇㅅㅇ ♨2.87™갤로그로 이동합니다. 21.08.25 58 7
1852215 아 배 아프군 젠장 ㅇㅇ(180.71) 21.08.25 16 0
1852214 백신 안맞으면 취직에 불이익 있냐? [1] ㅇㄹㄹ(223.62) 21.08.25 61 0
1852211 근데 플러터는 왜 야틀린 아님 [2] ㅇㅇ(112.218) 21.08.25 97 0
1852210 맥북 사고싶노 [2] ㅇㅇ(112.218) 21.08.25 105 0
1852209 서블렛중인데 어쩔땐 " 쓰고 어쩔땐 ' 쓰고 헷갈려 죽겠네 ㅇㅇ(125.180) 21.08.25 34 0
1852208 웹땔감 무시하면안됌 ㅇㅅㅇ ㅇㅇ(118.235) 21.08.25 61 0
1852207 담달 퇴사라 목에 힘주고 다닌다 [3] ㅇㅇ(220.71) 21.08.25 76 0
1852206 하이(118.221) 21.08.25 79 0
1852205 3대 막장 모르냐 ? ㅇㅅㅇ [3] ♨2.87™갤로그로 이동합니다. 21.08.25 101 0
1852202 웹땔깜할거면 수학 수준 중1쯤이면 됨 [3] ㅇㅇ(211.205) 21.08.25 86 0
1852199 AI 공부 커리큘럼 어떻게 감?? [3] ㅇㅇ(223.33) 21.08.25 98 0
1852198 코드 ㅈ도모르는데 언어 뭘로 하는게 좋을지 어떻게 선택하냐 [7] ㅇㅇ(175.212) 21.08.25 71 0
1852197 웹개발할때 사파리 ㅈ까 하고 개발하면 어찌됨 [2] ㅇㅇ(112.218) 21.08.25 59 0
1852196 넥슨 인턴 관심없냐 프붕이들 ㅇㅇ(110.10) 21.08.25 116 0
1852195 니들 인생 아니냐 [1] ㅇㅇ(1.235) 21.08.25 61 0
1852194 사칙연산도 힘들어하는 빡대가리가 ㅋㅋ [2] ㅇㅇ(1.235) 21.08.25 63 0
1852192 고졸 국비 베프 지잡 [1] ㅇㅇ(1.235) 21.08.25 51 0
1852191 아이패드 프로 들고다니기 부담스럽지 않음? [1] ㅇㅇ(220.93) 21.08.25 78 0
1852189 고졸 지잡대가 그님대 거려봐야 ㅋㅋ [2] ㅇㅇ(1.235) 21.08.25 54 0
1852188 고졸은 공장가는거 아니었냐? [6] ㅇㅇ(1.214) 21.08.25 119 0
1852187 기본카메라로 찍은건데 프로그래밍 언어 뭐 쓰게 생겼냐? [7] methyl갤로그로 이동합니다. 21.08.25 77 0
1852186 정처기 안따도 된다고 하는 고졸 지잡 특 [3] ㅇㅇ(1.235) 21.08.25 106 0
1852185 노드js 뭔지 모르겠음 [4] ㅇㅇ(123.111) 21.08.25 103 0
1852182 다익스트라는 왜케 좆같지 [3] ㅇㅇ(218.38) 21.08.25 71 0
1852181 갤에서 밝힌 떼껄룩취미 [5] ㅇㅇ(211.202) 21.08.25 69 0
1852180 우리회사정도면 중소 하위 몇%임? [5] ㅇㅇ(118.235) 21.08.25 87 0
1852179 인간이 자연적으로 생각하면 객체지향적으로 생각함. ㅇㅇ(39.7) 21.08.25 43 0
1852178 이번 롯데정보통신 미친듯 ㅋㅋㅋㅋ [9] ㅇㅇ(61.76) 21.08.25 458 0
1852177 게시판만드는거 어려움? [2] ㅇㅇ(123.111) 21.08.25 107 0
1852176 인생이 걸렸다.. [6] 하이(118.221) 21.08.25 254 0
1852173 SI 파견지 프리때문에 빡쳐서 못 다니겠다 ㅅㅂ [9] ㅇㅇ(211.217) 21.08.25 896 18
1852170 형들 영양제 먹는거 있어? [1] BulssangmanDreamTree갤로그로 이동합니다. 21.08.25 59 0
1852169 국비 1주일찬데 아직 내코드못짜겟음 [4] ㅇㅇ(118.235) 21.08.25 96 0
1852167 맞춤법검사기 삼일한 이거 지금 수정된거냐? ㅇㅇ(118.235) 21.08.25 36 0
1852166 앱개발 처음만지면 뇌정지 오는거 정상? [2] ㅇㅇ(112.218) 21.08.25 105 0
1852163 34살 국비1일차인데 질문좀 마이바티스 국가대표만 [3] 만들자웹(175.215) 21.08.25 135 0
1852162 국비갈거면 그냥 프엔 해라 ㅇㅇ(119.69) 21.08.25 61 0
1852161 네이버 카페 xpath로 글쓰게 하는데 트레이스백 오류뜸 ㅇㅇ(1.224) 21.08.25 38 0
1852160 보닌 삶의 질을 바꿔준 세가지 ㅇㅇ(58.120) 21.08.25 48 0
1852159 셜록00님의 제자가 되고 싶습니다 ㅜㅜ 셜록제자(211.44) 21.08.25 22 1
1852158 프로세스와 스레드의 차이가 뭔가요 [9] ㅇㅇ(223.62) 21.08.25 81 1
1852156 앱개발은 웹, pc프로그램이랑 왜케 다름 ㅇㅇ(112.218) 21.08.25 43 0
1852154 회사에서 백신맞으라는데 다음 접종 신청 언제냐 ? ㅇㅇ(175.123) 21.08.25 25 0
1852153 앱개발은 왜케 이세계 프로그래밍이노 [2] ㅇㅇ(112.218) 21.08.25 139 1
1852151 내 목엔 흘러 들어가 오피엄과 환타 흘러 도파민 ㅇㅇ(180.71) 21.08.25 29 0
1852150 좆비 자격증 이렇게따면돼? ㅇㅇ(211.178) 21.08.25 64 0
1852149 좆비 자격증 뭐따야됌 ㅇㅇ(211.178) 21.08.25 57 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2