Большие строки: текстовые файлы или база данных SQL? - PullRequest
3 голосов
/ 17 июня 2010

Я кодирую систему форума, используя PHP.

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

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

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

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

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

Ответы [ 5 ]

4 голосов
/ 17 июня 2010

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

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

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

Я согласен с другими ответами, хранение всех данных в вашей базе данных упрощает масштабирование, резервное копирование / восстановление, позволяет запрашивать данные и т. Д.

Если вы обеспокоены производительностью, вы можете реализовать кеш для содержимого страницы. Я знаю, что PHPBB делает это, имея сериализованный массив в текстовом файле с отметкой времени истечения. Также может быть сделано с использованием memcached или иным образом.

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

0 голосов
/ 17 июня 2010

Это не так, как вопрос уже принят, однако вы должны проверить phpbb3 (http://www.phpbb.com/). Очень надежный форум php. Может сэкономить вам время на разработку: D

0 голосов
/ 17 июня 2010

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

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

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

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

Добавлена ​​

Большинство моих ссылок были .NET-кодом. Вот форум с открытым исходным кодом, написанный на PHP: http://www.phorum.org/

0 голосов
/ 17 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...