2010-06-16 3 views
3

Я кодирую систему форума, используя PHP.Большие строки: текстовые файлы или SQL DB?

В настоящее время я сохраняю идентификатор потоков, заголовок, автора, представления и другие атрибуты в базе данных SQL, а затем сохраняю тело потока (HTML и BBcode) в текстовых файлах внутри папки с именем после идентификатора потока.

На практике очень просто захватить значения базы данных, а затем просто захватить тело потока из текстового файла, но мне было интересно, является ли это «правильным способом»? У меня лично нет проблем с этим, но если окажется, что он неэффективен, и я должен вместо этого сохранить в базе данных и HTML-код потока и BBcode, а затем изменить.

Однако мне кажется неправильным хранить такую ​​(очень возможно) огромную строку многострочного текста вместе с множеством разных символов в базе данных - меня учили, что базы данных больше подходят для коротких полевых значений чем содержание веб-сайта.

Я хотел бы получить окончательный ответ на этот вопрос, потому что он постоянно искал меня, где бы я ни делал это правильно.

Кто-нибудь знает, как популярные форумы хранят потоки?

Благодарим за ответы, так что лучше всего хранить содержимое потока в базе данных, какой тип поля я должен использовать? А как насчет ответов? Другая таблица, в которой есть идентификатор потока и идентификатор комментария, а затем тело комментария? Я новичок в этой базе данных, поэтому спасибо за помощь.

+0

Joomla - все содержимое находится в базе данных. Возможно, Drupal тоже. Бесчисленные системы хранят контент в базе данных. (Опасайтесь, это только статистика!) – MvanGeest

+0

Лучше спросить отдельный вопрос о последующей разработке базы данных. Нет ограничений на количество вопросов, которые вы можете задать, и изменение критериев означает, что те, кто изначально предоставил ответы, могут быть опущены - мы не будем предупреждены, когда вы обновите свой вопрос. –

+0

Хорошо, да, я понимаю, спасибо! – Tommo

ответ

4

Confluence (коммерческая вики) хранит содержимое всей страницы в пределах одного столбца.

Причина хранить большой текст в базе данных:

  1. Там нет (надеюсь) не разрыв между значением и записи (ей) текст, связанный с
  2. Есть такие технологии, как Полный текст Поиск (FTS), чтобы найти конкретные строки в больших количествах текста
  3. Упрощенный резервный & процесс восстановления
+0

+1. Я забыл о Confulence, и мы его используем ... – David

0

Было бы лучше всего сохранить поток в базе данных, так как это позволит вам масштабировать и искать проще.

Если вы хотите продолжить использовать файлы для хранения содержимого, я бы рекомендовал использовать что-то в соответствии с строками GridFS. В основном просто блокирует файлы и сохраняет их в NOSQL.

0

Я знаю, что DotNetNuke и AspDotNetStorefront использует базу данных для хранения таких данных. Это не форумы, а система управления контентом и корзина с возможностями управления контентом.

Я также экспериментировал с несколькими форумами (например, YAF), и все они используют базы данных. Лично я придерживался БД для HTML, и любые файлы изображений/содержимого должны храниться на диске со ссылкой на их местоположение в HTML.

Возможно, самый сильный аргумент для хранения в БД: лучше всего искать текстовые поля с предложением LIKE, чем искать сильное в текстовом файле.

Кроме того, при наличии бесплатного программного обеспечения для форумов cout, могу ли я спросить, почему вы пишете новый с нуля? Я понимаю, что есть, вероятно, хорошие причины, но только в том случае, если это то, что вы не думали еще ...

Добавлено

Большинство моих ссылок были .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 или иначе.

Хранение данных в базе данных дает вам максимальную гибкость и удобство, большинство проблем, связанных с обслуживанием данных для конечного пользователя, можно обрабатывать путем кэширования данных.

Смежные вопросы