CMS - сохранить фотографии в базе данных, какова правильная структура? - PullRequest
1 голос
/ 05 февраля 2010

В настоящее время я создаю систему CMS, в которой нужно сохранять много фотографий для каждой статьи. У меня много вопросов: -)

Мне нужно показать изображения в нескольких размерах, с водяным знаком или без него. Кроме того, мне нужно иметь оригинальную картинку, для архива и администраторов. То, что я думаю сделать сейчас, - это сохранить изображения в базе данных в двух версиях: 1. исходное изображение, 2. веб-оптимизированная версия.

  1. Это действительно удобный способ сохранить все изображения в таблице. Но разве это хорошая идея? Допустим, база данных будет содержать сотни тысяч картинок, исходный размер картинки, вероятно, составляет около 3 МБ. так что размер БД может быть легко 100 ТБ .... Это действительно хорошая стратегия?

  2. С другой стороны, я сохраняю уменьшенную версию для каждой картинки. Эта версия должна быть показана в нескольких размерах, с водяным знаком и без него. В настоящее время я думаю, чтобы думать об этом в каждом запросе. запрос будет иметь параметры width, и в соответствии с этим я могу определить размер и водяной знак. (Я кеширую эту работу конечно). Опять же, это хорошая стратегия? это действительно сработает, или это очень дорогая дополнительная работа?

  3. Неужели лучше сохранить это на БД? Я имею в виду каждый запрос к статье, потребуется около 50 других запросов к его изображениям, и каждый запрос требует открытия / закрытия соединения с базой данных.

Технологии, которые я собираюсь использовать: .net, sql-server 2008, NHibernate.

Ответы [ 2 ]

3 голосов
/ 05 февраля 2010

Лучший подход - хранить эти изображения в файловой системе и идентификаторы в базе данных. Из соображений производительности и обслуживания. Резервное копирование и восстановление было бы намного проще в файловой системе, и отправка СУБД для такой работы не лучшая идея, вам нужно будет перенести их из БД в приложение, а затем передать на клиент. Я просто считаю, что это не работа. Поставьте демон lighttpd или что-то еще для хостинга изображений и оставьте его делать свою работу.

Но если вам нравится идея, так как вы собираетесь использовать SQL Server 2008, вы можете использовать FILESTREAM для хранения ваших изображений в ваших таблицах. В конце концов, он создаст файлы в выбранном вами месте хранения и сохранит двоичные данные в файловой системе, обеспечивая при этом транзакционные функции и целостность данных, что является большим бонусом. Посмотрите на этот вариант. Как я помню, это хорошо работает, и фактическая база данных будет намного компактнее.

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

2 голосов
/ 05 февраля 2010

Размещение изображений в базе данных имеет несколько преимуществ.Кислотные помехи и непротиворечивость резервных копий приходят на ум.Если вам это абсолютно необходимо, поместите изображения в базу данных.Как вы указали, это имеет свою цену: вам понадобится огромная инфраструктура базы данных, такая как компьютеры, лицензии, операционная команда.Каждый поиск изображений требует огромных усилий по вводу / выводу в БД.

Многое будет намного проще, если хранить только метаданные в БД и помещать блобы изображений в файловую систему.

Два подходачтобы прийти к решению:

  • Какая функция убийцы вам абсолютно необходима (абсолютно как в «если у меня ее нет, все это не будет работать вообще»), нужно отподход изображения в базе данных?Если он есть, воспользуйтесь этим

  • Сделайте бизнес-кейс на заднем плане, рассчитав общую стоимость подхода «изображение в базе данных» (усилия проекта, инфраструктура,машина, лицензия, операция) и сравните это с подходом «образ в файловой системе».Это должно дать некоторые советы о том, как действовать.

...