말이 무진장 딱딱하게 들리는데,
쉽게 말해서, 한 게시판의 자료가 50만건이 넘어가고 있을 때, 이 게시판 목록을 어떻게 보여줄 것인가? 이것에 대한 이야기입니다.
1. limit offset 으로 구현하기
이 문제점은 예전부터, 그리고, PostgreSQL 놈의 limit offset 구현 알고리즘이 바뀌지 않는 한 앞으로도 별로 합리적인 방법이 못됩니다.
왜냐하면, offset 값이 크면 클수록 소요시간은 계속해서 늘어날터이니.
2. 목록보기를 위한 자료와 전체 자료를 분리해서 목록보기를 위한 자료만 목록보기에 사용한다.
이 생각의 출발은
'50만건 자료에 대한 전체 목록을 보려고 하는 사람이 없다!'는 것을 전제합니다.
어떻게 보면 맞는 생각인 것 같습니다.
'2003년 7월달 자료', '2003년 8월달 자료' .... 이런 형태로 특정 조건으로 그 최대 offset 값을 줄이는 방법이기도 합니다.
3. 트랜젝션 서버 커서와 move, fetch 구문으로 처리한다.
전통적인 RDBMS 개념으로 볼때, 가장 합리적인 방법입니다.
문제는 그 커넥션이 보장되어야 트랙젠션을 만들고 그 트랜젝션을 이용할 수 있다는 것인데, 일반적인 아파치+PHP 환경에서는 불가능한 일이다고 보는 것이 맞는 것 같습니다. 자바서브릿이나, 웹블로우져 의존적인 ActiveX 이용하면 가능할 것입니다.
(M$ 동네쪽의 ODBC로도 불가능한 일입니다. 아직까지 ODBC가 그리 깔끔하게 작동하지도 않는지라)
4. 가장 단순한 생각, 서버 시스템 사양을 높인다. :)
돈만 있으면 가장 간단하고 손쉽게 해결 할 수 있는 방법입니다.
하드디스크 억세스 속도가 무진장 빠르고, CPU 속도가 무진장 빠르고, 메모리가 빵빵하면 해결날 수 있지요.
지금까지 대용량 데이터 목록 처리에 대한 개인적인 생각이었습니다.
관심 있으신 분들의 다른 의견들도 함께 올려주시면 이 문제로 고민하고 있는 많은 분들이 여러 모로 도움을 받을 듯싶네요.
|