2010-06-16 5 views
3

나는 PHP를 사용하여 포럼 시스템을 코딩하고 있습니다.큰 문자열 : 텍스트 파일 또는 SQL DB입니까?

현재 스레드 ID, 제목, 작성자,보기 및 기타 특성을 SQL 데이터베이스에 저장하고 있으며 스레드 ID (Thread ID) 이름의 폴더 안에 텍스트 파일에 스레드 본문 (HTML 및 BBcode)을 저장하고 있습니다.

실제적으로 데이터베이스 값을 잡아 내고 텍스트 파일에서 스레드 본문을 가져 오는 것은 간단하지만 '적절한 방법'인지 궁금합니다. 나는 개인적으로 아무런 문제가 없지만 대단히 비효율적 인 경우 대신에 스레드 본문 HTML과 BBcode를 데이터베이스에 저장해야한다.

그러나 나에게 데이터베이스에 많은 다른 문자와 함께 (매우 가능성있는) 거대한 멀티 라인 텍스트 문자열을 저장하는 것은 잘못된 것처럼 보입니다. 데이터베이스는 짧은 필드 '값'보다는 오히려 더 많은 것을 배웠습니다. 웹 사이트 콘텐츠보다

나는 제대로 해왔 던 어느 곳에서나 나를 괴롭 히고 있기 때문에 이것에 대한 확실한 답을 원합니다.

인기있는 포럼 시스템이 스레드를 저장하는 방법을 아는 사람이 있습니까?

답변 주셔서 감사합니다. 따라서 스레드 콘텐츠를 데이터베이스에 저장하는 것이 가장 좋습니다. 어떤 필드 유형을 사용해야합니까? 또한 무엇에 대한 답장? 쓰레드 ID와 코멘트 ID를 가진 또 다른 테이블? 이 데이터베이스에 익숙하지 않으므로 귀하의 도움에 감사드립니다.

+0

Joomla - 모든 내용은 데이터베이스에 있습니다. 아마 Drupal도. 수 많은 시스템은 데이터베이스에 콘텐츠를 저장합니다. (주의하십시오, 이것은 단지 통계입니다!) – MvanGeest

+0

데이타베이스 설계에 대한 별도의 후속 질문을하십시오. 몇 가지 질문을 할 수있는 제한이 없으며 기준을 변경하면 처음에 답변을 제공 한 사람이 뺄 수 있습니다. 질문을 업데이트 할 때 알림이 표시되지 않습니다. –

+0

그래, 알았어, 고마워! – Tommo

답변

4

Confluence (상업용 위키)는 전체 페이지 콘텐츠를 단일 열에 저장합니다.

데이터베이스에 큰 텍스트를 저장하는 이유는 다음과 같습니다

  1. 텍스트가
  2. 전체 텍스트와 같은 기술이있다
  3. 와 연관된 값과 레코드 (들) 사이의 (희망)에는 분리가 없습니다 (FTS)는 많은 양의 텍스트에서 특정 문자열을 찾을 수 있도록 검색
  4. 간체 백업 & 내가 아는 과정
+0

+1. 나는 Conful을 잊어 버렸고, 우리는 그것을 사용합니다 ... – David

0

데이터베이스에 스레드를 저장하는 것이 좋습니다. 그러면 스레드를보다 쉽게 ​​확장하고 검색 할 수 있기 때문입니다.

콘텐츠를 저장하기 위해 파일을 계속 사용하려면 GridFS의 라인을 따라 무언가를 사용하는 것이 좋습니다. 기본적으로 파일을 청크로 만들어 NOSQL에 저장합니다.

0

을 복원하는 DotNetNuke의과 AspDotNetStorefront는 이러한 데이터를 저장하기 위해 데이터베이스를 사용합니다. 이들은 포럼이 아니며 컨텐츠 관리 기능을 갖춘 컨텐츠 관리 시스템 및 장바구니입니다.

나는 또한 여러 개의 포럼 (예 : YAF)을 사용하여 실험했으며이 모든 것은 데이터베이스를 사용합니다. 개인적으로, 나는 HTML을위한 DB를 고수 할 것이고, 어떤 이미지/컨텐트 파일도 HTML에 그들의 위치를 ​​참조하여 디스크에 저장되어야한다.

아마 DB에 저장하기위한 가장 강력한 인수 : LIKE 절을 사용하여 텍스트 필드를 검색하는 것이 텍스트 파일에서 strong을 검색하는 것보다 훨씬 쉽습니다.

또한 무료 포럼 소프트웨어를 사용하면 처음부터 새로 작성하는 이유를 물어볼 수 있습니까? 나는 좋은 이유는 아마이 있습니다 실현,하지만 단지의 경우는 아직 생각하지 않았다 뭔가 ...

추가

내 참조의 대부분은 .NET 코드했다입니다. PHP로 작성된 공개 소스 포럼은 다음과 같습니다. http://www.phorum.org/

+2

그리고 LIKE 절은 매우 천천히 끝날 수 있습니다 ... 전체 텍스트 인덱싱을 사용하고 싶을 수도 있습니다. –

+0

@ 넬슨 - 좋은 지적입니다! – David

+0

감사합니다. 또한 나는 스스로를 주로 학습 훈련으로 코딩하고 있으므로 심각한 웹 사이트가 아니므로 시스템 코딩을 직접해볼 것이라고 생각했습니다. – Tommo

0

위와 같은 질문은 이미 수용되었지만 phpbb3 (http://www.phpbb.com/)을 확인해야합니다. 매우 견고한 PHP 포럼. D

+0

고마워,하지만이 포럼을 코딩하는 주된 목적은 나 자신을위한 학습 과제로서 그렇지 않으면 나는 phpbb를 사용한다. :) – Tommo

0

다른 답변에 동의하고 데이터베이스에 모든 데이터를 저장하여 크기 조정, 백업/복원을 단순화하고 데이터를 쿼리하는 등의 작업을 수행 할 수 있습니다.

성능에 관심이있는 경우 페이지 콘텐츠에 대한 캐시를 구현할 수 있습니다. 나는 PHPBB가 만료 타임 스탬프가있는 텍스트 파일에 직렬화 된 배열을 가짐으로써 이것을 수행한다는 것을 알고있다. memcached 또는 다른 방법을 사용하여 수행 할 수도 있습니다.

데이터베이스에 데이터를 저장하는 것이 가장 융통성 있고 편리하며 최종 사용자에게 데이터를 제공하는 것과 관련된 대부분의 문제는 데이터를 캐싱하여 처리 할 수 ​​있습니다.

관련 문제