Должен ли я хранить мои изображения в базе данных или папках?

Возможный дубликат:
Сохранение изображений в DB - Yea или Nay?

Привет

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

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

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

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

Я хотел бы добавить что-то вроде этого на мой сайт (просматривая изображения). Какие-нибудь примеры кода для меня о том, как это сделать, когда изображения сохраняются в базе данных? Я использую ASP.NET с VB.net. Нажмите здесь, чтобы посмотреть, о чем я говорю

Любые идеи ребята?

Отношения Etienne

Ответ 1

Я сделал это в обоих направлениях в последнее время. Я предпочитаю использовать метод каталогов для хранения изображений, сохраняя их свойства в БД.

Основная причина: у меня был клиент, для которого я сделал сайт. Был раздел фотогалереи, который позволял им загружать новые фотографии, которые можно было просматривать с общего сайта. Мой клиент не думал, чтобы оптимизировать свои изображения перед загрузкой. Так что в основном каждый .jpg был более 1 мб. Я добавил возможность обновлять изображение после его сохранения в БД, но это нужно было сделать по одной записи за раз.

Если бы это то же самое происходило при хранении изображений в каталоге, файлы могли быть сохранены локально, оптимизированы и возвращены на сервер.

Вот пример

Ответ 2

Я бы пошел на папки. Большая гибкость, если вы исчерпали пространство sttorage (просто переместите их на другой диск и перетащите), больше гибкости с другими приложениями (например, Silverlight). Я бы использовал только DB для файлов, которые должны были быть безопасными.

Ответ 3

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

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

Короче говоря, когда изображения имеют деловую ценность (т.е. они довольны, им нужна безопасность или они динамичны), вам придется хранить их в БД. Там, где они статичны и тривиальны, пусть веб-сайт является веб-сайтом.

Ответ 4

Две мысли по этому поводу:

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

  • Использовать SQL Server 2008. Он имеет новый тип данных, называемый filestream, в то время как сохраняет изображения в файловой системе, но позволяет вам получать их через стандартные запросы к базе данных. Подробнее см. http://msdn.microsoft.com/en-us/library/cc949109.aspx.

Это не эксклюзивный выбор, но, по крайней мере, я бы рекомендовал вариант №1 по самому факту, что вы получите лучшую производительность из-за использования схемы на основе файловой системы, а не для хранения и чтения блоб базы данных.

Ответ 5

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


Мое предложение: сохраните свои изображения в папках. только нужно знать об операциях ввода-вывода системы.

Ответ 6

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

Ответ 7

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

Отдельные вещи, мой друг, с наилучшими пожеланиями!

Ответ 8

AFAIK, flickr.com идет с папками/файловым сервером, а также с ссылкой, метаданными и т.д., хранящимися в db. См. архитектура flickr

Ответ 9

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

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

Ответ 10

Я поеду для обоих.

Во-первых, сохраните каждое изображение в виде столбца BLOB в базе данных. Поступая таким образом, вы можете быть уверены, что изображение всегда будет включено в резервную копию базы данных (если вы это сделаете).

Во-вторых, скопируйте файл в папку. Поступая таким образом, вы можете избежать запроса к базе данных (для файла изображения) каждый раз. Сохранение только в папке может иметь такие последствия, как

  • потерянный файл из-за повреждения диска
  • файл не включен в операцию резервного копирования.

До сих пор все наши проекты клиентов применяли тот же подход, и мы столкнулись с различными проблемами, но никакие загруженные файлы не были потеряны. (Мы говорим о > 100 ГБ загруженных документов).

Обратите внимание, что вы можете посмотреть следующее:

  • Убедитесь, что всякий раз, когда файл обновляется/заменяется, делайте это как в базе данных, так и в папке. В противном случае это будет непоследовательно.
  • Для хранения информации о файле может потребоваться отдельная таблица. Как правило, вы можете сохранить следующее: (1) имя файла (2) тип файла (3) размер файла/тип mime
  • Вы можете разделить таблицы, в которых хранятся данные. Наша практика - когда таблица достигает 2 ГБ, мы создаем другую таблицу. Разработанный правильно, не должно возникнуть никаких проблем с поиском правильной таблицы.

Надеюсь, что это поможет.