랜덤 게시글을 제공하면서 수만개의 게시글에서 1개를 매번 뽑는다는게 약간은 비효율이 발생할 수 있다고 보고 고민을 해보았습니다.
5만개에서 1개를 뽑는다고 가정하겠습니다.
1.db 에서 5만개를 리스트업 한 후 1개를 뽑아 매번 제공한다.
VS
2.db의 5만개 리스트를 php 의 $data에 캐시로 저장한 후 1개를 rand로 뽑아 제공한다.
db에 부하를 최소화 할 수 는 있을 거라는 생각은 들었습니다. 랜덤글을 읽는 행위를 한다는건 연속적으로 이용한다는 면에서 본다면 캐시된 데이터에서 1개씩 뽑는 과정을 반복한다면 효율이 많이 높아질 것 같구요.
5만개의 요소를 가진 배열을 캐시화 해서 캐시 데이터를 읽고 읽은 데이터에서 1개를 rand() 하는데 새롭게 발생되는 문제가 있는지 궁금합니다.
5만개의 글 제목, 내용, 글쓴이 정보 등을 전부 담는다? 용량이 어마어마하겠지요.
5만개의 글 번호만 배열로 만들어서 담는다? 이건 해볼만할 것 같습니다.
배열에 담았던 데이터를 랜덤으로 뽑는 방식도 중요합니다.
모조리 셔플하고 나서 맨 처음/마지막 것을 뽑는다? 어마어마한 낭비지요.
일단 rand()로 n이라는 숫자를 뽑은 후, 배열에서 n번째 데이터를 콕 찝어 가져온다면 훨씬 낫고요.