요즘들어 DSN의 속도가 많이 늦어지고 있는데...
설마하니 이곳에 개발자가 DB를 모르는 것도 아니고 Index를 안걸었다고는 생각하지 않습니다.
얼마전에 제가 이곳에 남길글 역시 한 회원으로서 사이트의 속도 개선에 대한 글을 올렸던걸 기억하시는 분들도 있을겁니다.
제가 여러가지 사이트를 개발하면서 생각해낸 아이디어 한가지를 여러분들께 공개하니 많이 활용하세요...제 경험상 사이트의 속도를 2배이상 아니 저의 경우는 거의 무자게 올라갔답니다.^^
사이트에서 속도의 영향을 주는 곳은 바로 첫 페이지와 게시판입니다.
만일 첫 페이지의 사이즈(이미지를 포함)해서 너문 큰경우겠지요...이런 문제는 프로그램어 소관이 아니니까 재껴두고^^
서론이 너무 길었나요~~
이제 본론으로 돌아와서 어떻게 하면 게시판을 빠르게 하느냐...
제가 운영하는 사이트인 www.oxnara.com 의 자유게시판에 들어가 보시기 바랍니다.
MySQL 과 NT한대로 버티는 게시판이고요 약 2만여개의 글이 올라갔으며 페이지로는 거의 천페이지가 넘고 평균적으로 답변글이 2~3개 이상이 있습니다. 또한 게시판에서 속도가 가장 나올수 없는 구조인 Tree형식으로 db를 설계하였습니다.(알아들을라나???)
그런데 평균 페이지 조회속도는 3초를 넘긴적이 없고 보통은 1초면 나옵니다. 또한 동시 접속자 3천명도 버텼고 동시 백여명이 글을 적은걸 버텼던 대단한 게시판입니다...ㅋㅋㅋ...자랑이 너무 많군...
물론 인덱스와 테이블을 단일로 하고 일반적으로 시스템 부하를 최소화 하기 위한 절차는 기본적으로 다 했습니다.
그정도로는 이속도가 못나오죠^^
가장 중요한 점은 게시판의 특징을 잘 알아야 한다는 점입니다.
50페이지정도 있는 게시판을 접할때 여러분들이 어느페이지를 먼저 보게 되나요? 성격이 이상한 분이라며 아마도 25페이지겠죠^^
하지만 대부분의 사용자라면 1~3페이지내로 그 범위가 축소됩니다.
저는 이점을 이용하여 게시판을 설계하였습니다.
게시판에서 가장 많은 데이타를 포함하고 있는 본문부분만을 뺀 나머지 필드만 동일한 임시 테이블을 만들었습니다.
이테이블에 약 10페이지 분량의 내용만 일치하도록 하였습니다.
그래서 list를 출력할때 10페이니 이내인 경우는 바로 이 테이블에서 데이타를 가져오는 방식을 취했습니다. 즉 일종의 캐쉬테이블을 만든 셈이지요.
여러분들도 게시판을 만들어 봤다면 10페이지 이내인 게시판이 느린경험은 없을겁니다. 느렸다면 프로그램어아 아니라 아마 ....ㅠㅠ
데이타를 입력/수정/삭제시 양쪽 테이블에 다 동시에 저장하고 list를 뿌릴때 페이지의 범위에 따라서 접속하는 테이블을 변경했습니다.
이경우의 동작의 속도는 기존방식의 2배가 걸리지만 이는 전체 게시판이 점유하는 시간의 1%도 안됩니다. 왜냐? 그건 100번 읽을때 1번도 글을 안쓰는 네티즌의 게으름 덕분이죠^^
이 방법을 이미 사용하고 계신분도 있을지는 모르지만 저 나름대로는 그냥 제머리속에서 나온 생각이라고 자부하고 싶답니다.
설마하니 위에 적은 방법으로 특허내서 때돈벌면...저 반만 주세요...ㅋㅋㅋ
참고로 제 홈피 주소는 www.popome.com 입니다. 많이 방문해 주세요^^
시간나면 또 다른 생각도 올리겠습니다.
|