phpBB에서 끈적이 했던 글을 풀으면 어떻게 됩니까?
글쓴이: zzf / 작성시간: 일, 2006/01/08 - 12:27오전
phpBB와 같은 포럼 형식의 게시판을 만들고 있습니다. 그런데, phpBB를 관리자 입장에서 써본 적이 없어서 끈적이 기능이 어떤건지 알고 싶습니다. 일단 끈적이 해놓으면 가장 위에 올라간다는건 알겠는데, 끈적이를 풀으면 그 글이 어디로 가야 되는지가 궁금합니다. 예를 들자면.
5 - 4 - 3 - 2 - 1
이렇게 글이 있을때 3번에 끈적이를 하면
[3] - 5 - 4 - 2 -1
여기서 글을 하나 더 쓰면
[3] - 6 - 5 - 4 - 2 - 1
여기까진 이해가 가는데, 이제 3번의 끈적이를 해제하면 3번의 위치가 어디로 가야 되는가 하는 것이죠.
6 - 5 - 4 - 3 - 2 - 1 <- (A)
이렇게 원래위치로 돌아가야 합니까? 아니면
3 - 6 - 5 - 4 - 2 - 1 <- (B)
이렇게 그냥 그자리에 그대로 있으면 됩니까?
만들기는 B처럼 만드는게 쉬운데, A처럼 해야 할 것 같기도 하고...
phpBB는 A와 B중 어느 쪽입니까? 그리고, 만약 A처럼 해야 된다면, 게시판 글의 목록을 얻어올 때 어떻게 처리해야 될까요?
Forums:
생각을 잘못하고 계신 것 같습니다.
끈적이 글이든 뭐든 목록의 위치를 결정하는 값들은 다른 모든 글과 똑같이 가지고 있을 겁니다. 단지 목록을 결정할 때 끈적이 필드가 참이면 그것부터 처리할 뿐이죠.
따라서 A가 되는 게 당연합니다. 오히려 B처럼 되는 건 잘못 구현된 거라고 봅니다.
mysql이라면 order by flag desc, idx desc같이
mysql이라면 order by flag desc, idx desc같이 하면 되겠지만 이게 파일기반이라 어떻게 해야 될 지를 모르겠군요;;;
현재는, 모든 글 번호를 출력할 순서대로 저장한 index 파일을 따로 가지고 있습니다. 만약 10페이지의 글 목록을 출력한다 싶으면 index파일에서 fseek함수로 index 파일의 해당 위치로 바로 가서 글 번호들을 읽어와서 출력하도록 되어 있습니다. 따라서 글 목록을 표시할 때 걸리는 시간은 페이지 번호에 상관없이 O(1) 입니다.
근데 만약 A처럼 돌아가게 하려면, 다음과 같은 두가지 방법중 하나를 선택해야 합니다.
(1) index 파일을 여러개(끈적이 적용한거, 끈적이 적용하지 않은 거) 만들어놓고서, 끈적이를 해제할 때마다 끈적이를 적용하지 않은 index 파일을 참조해서 원래 위치를 복구한다. index 파일의 갯수가 원래 갯수의 2배로 뻥튀기한다. index 파일을 갱신하는 모든 동작이 두배로 느려진다.
(2) mysql에서 하는 것처럼, 끈적이 붙은 목록을 먼저 세고, 그 다음에 나머지 글들을 처음부터 순서에 따라서 매번 다시 센다. n페이지의 목록을 출력하는데 걸리는 시간이 O(n)으로 뛰게 된다.
가뜩이나 느릴 파일 기반 DB라 무척 불안한데, 1이나 2나 모두 별로 마음에 드는 선택이 아닙니다.
뭔가 더 효과적인 목록 계산 방법이 없을까요?
별로 동작이 달라지진 않을 텐데요?
끈적이용 인덱스를 따로 유지한다고 해도, 인덱스 갱신 자체는 글의 생성이나 수정시 그 글이 끈적이 붙은 건가 안 붙은 건가에 따라 어느 한 쪽만 갱신하는 것 아닙니까?
더구나, 끈적이를 켰다 껐다 하는 동작을 자주 할리도 없지 않습니까?
댓글 달기