2013-10-02 3 views
1

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

Теперь я немного смущен, каким образом я мог бы сохранить данные. Либо в базе данных, либо в файловой системе в виде файла .txt или .html-файла или любым другим способом. Сохранение данных в базе данных вызывает у меня немного смущения, потому что изначально я планирую запустить сайт на общем сервере. Так будет ли общий объем сервера достаточным для огромного контента? Или это рекомендуется сохранить содержимое как отдельный файл .txt или .html-файл?

соображения: функциональность

  1. Поиск будет использоваться только для названия статьи. Заголовок статьи будет сохранен в базе данных. Функция поиска не распространяется на содержимое статьи.
  2. Я планировал использовать редактор WYSIWYG и разрешать вкладчикам форматировать их содержимое. Поэтому, очевидно, что сохраненные данные будут содержать коды HTML. Таким образом, сохранение содержимого в файловой системе безопасно, потому что это XSS-атака в базе данных, является ли это истиной?
  3. Изображения сохраняются в файловой системе, а не в базе данных.

a. Каковы точки, которые необходимо сконцентрировать, чтобы предотвратить атаку XSS при этом?

b. Если сохранение в базе данных является рекомендуемым решением, каков должен быть тип данных? ТЕКСТ или LONGTEXT?

+0

Поле типа LONGTEXT в MySQL может хранить до 4 ГБ символов. Я сомневаюсь, что у вас будет одна статья, которая огромна;) –

+0

@ Glavić: Не так :) Но становится необходимым снова подумать. Потому что пользователи могут написать длинную статью тоже. –

+5

@Surya - если вы действительно считаете, что ваши пользователи напишутся более чем на 4 ГБ персонажа в одной статье, я бы передумал - 4 ГБ эквивалентно примерно 3,500 типичных романов –

ответ

2

Это 2 самых общих решений я могу думать:

  1. хранить все в базе данных.
  2. Храните «маленькие» данные в базе данных и все вложения (двоичный файл, такой как JPEG и PDF) за пределами базы данных в файловой системе.

Оба решения имеют преимущества и недостатки.

Решение # 1: Хранить все в базе данных

Преимущества:

  • С некоторыми (мощные) базы данных вы можете даже индекс (Seach) содержание общих форматов файлов, таких как PDF (Oracle interMedia является пример).
  • Вы можете легко обеспечить целостность данных.
  • Вы можете легко обеспечить безопасность данных.

Недостатки:

  • делает базу данных огромны и может быть мучительно медленным, если вы никогда не содержанием ваших баз данных/таблиц.
  • Может быть сложнее «просматривать» двоичный контент для отладки.
  • Вам особенно необходимо запустить обслуживание базы данных/таблицы, если в вашем проекте имеется огромная база данных, в которой многие пользователи читают/записывают.
  • Резервное копирование базы данных может быть труднее выполнить и восстановить.
  • Может быть когда-нибудь сложно использовать файл в веб-приложениях (необходимо знать тип MIME для правильного отображения файлов).

Решения # 2 - Магазин «малые» данные в базе данных, и все вложения за пределами базы данных в файловой системе

Преимущество:

  • HTTP кэширования файлов являются несколько проще делать.
  • Легче просматривать файлы (для отладки или чего-то еще).
  • Легче поддерживать быструю систему, не делая ничего особенного.

Недостатки:

  • нужно создать и поддерживать таблицу отношений, которые будут связывать файлы в файловой системе для субъектов в базе данных.
  • Невозможно создать целостность данных (что произойдет, если файл будет удален вручную в файловой системе, но все еще присутствует в базе данных?).
  • Безопасность должна быть обеспечена на многих уровнях.

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

Для общей среды я бы, вероятно, пошел с # 2, поскольку общая среда обычно не очень мощная.

+0

Спасибо, Алекс. Я бы выбрал второе решение. Можете ли вы обратиться к некоторым учебникам, чтобы узнать о мерах безопасности? –

+1

@Surya S Я не знаю какого-либо конкретного учебника для этого, но просто убедитесь, что файл, хранящийся в файловой системе, по крайней мере ограничен ограниченным доступом (если они должны быть). Поместите их в не-общедоступный каталог и обслуживайте их с помощью PHP (имейте в виду кеширование при этом). – AlexV

+0

Спасибо, Алекс. –

1

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

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

  2. Используйте базу данных NoSQL (CouchDB), которая содержит всю информацию о статье. Сохраняя документы в CouchDB, введите идентификатор статьи в качестве имени документа, чтобы можно было легко сопоставить идентификаторы статей в документах статей.

+0

даже Casandra (nosql) очень хорош для огромного хранилища данных и высокой масштабируемости – sravis

+0

Да, Facebook также использует его. –

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