phpBB에서 끈적이 했던 글을 풀으면 어떻게 됩니까?

zzf의 이미지

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처럼 해야 된다면, 게시판 글의 목록을 얻어올 때 어떻게 처리해야 될까요?

keizie의 이미지

끈적이 글이든 뭐든 목록의 위치를 결정하는 값들은 다른 모든 글과 똑같이 가지고 있을 겁니다. 단지 목록을 결정할 때 끈적이 필드가 참이면 그것부터 처리할 뿐이죠.

따라서 A가 되는 게 당연합니다. 오히려 B처럼 되는 건 잘못 구현된 거라고 봅니다.

zzf의 이미지

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나 모두 별로 마음에 드는 선택이 아닙니다.

뭔가 더 효과적인 목록 계산 방법이 없을까요?

keizie의 이미지

zzf wrote:
현재는, 모든 글 번호를 출력할 순서대로 저장한 index 파일을 따로 가지고 있습니다. 만약 10페이지의 글 목록을 출력한다 싶으면 index파일에서 fseek함수로 index 파일의 해당 위치로 바로 가서 글 번호들을 읽어와서 출력하도록 되어 있습니다. 따라서 글 목록을 표시할 때 걸리는 시간은 페이지 번호에 상관없이 O(1) 입니다.

근데 만약 A처럼 돌아가게 하려면, 다음과 같은 두가지 방법중 하나를 선택해야 합니다.

(1) index 파일을 여러개(끈적이 적용한거, 끈적이 적용하지 않은 거) 만들어놓고서, 끈적이를 해제할 때마다 끈적이를 적용하지 않은 index 파일을 참조해서 원래 위치를 복구한다. index 파일의 갯수가 원래 갯수의 2배로 뻥튀기한다. index 파일을 갱신하는 모든 동작이 두배로 느려진다.

끈적이용 인덱스를 따로 유지한다고 해도, 인덱스 갱신 자체는 글의 생성이나 수정시 그 글이 끈적이 붙은 건가 안 붙은 건가에 따라 어느 한 쪽만 갱신하는 것 아닙니까?

더구나, 끈적이를 켰다 껐다 하는 동작을 자주 할리도 없지 않습니까?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.