Хранить картинки в виде файлов или в базе данных для веб-приложения?

Мой вопрос довольно общий, и я знаю, что не может быть 100% ответа на него. Я создаю веб-решение ASP .NET, которое будет включать в себя много картинок и, надеюсь, достаточное количество трафика. Я действительно хочу добиться производительности.

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

Большое спасибо, Стефан

ДУБЛИКАТ : Хранение изображений в БД - да или нет? , Как сохранить изображения в вашей файловой системе , хранение небольшого количества изображений: блоб или фс? и, возможно, некоторые другие.


КОММЕНТАРИЙ: Спасибо за много хороших ответов. Я пойду на файловое решение, даже если мне нравится идея иметь 100% -ое решение на основе базы данных. Кажется, сегодня есть хорошие решения для того, чтобы делать то, что я хочу, с базами данных и т. Д., Но у меня есть несколько причин не делать этого.

  • Я буду на размещенном решении, у меня есть огромный объем памяти (10 ГБ), но только 300 МБ для базы данных. Это будет стоить много для дополнительного хранения в БД.

  • Я не специалист по БД и не контролирую настройки БД. Решение на основе БД может нуждаться в пользовательской конфигурации, как это выглядит.

Если мы перейдем к запуску сайта на нашем собственном сервере, я мог бы рассмотреть решение на основе БД. спасибо Стефан

18.02.2009 15:16:49
Пожалуйста, укажите базу данных, которую вы используете.
Gerrie Schenck 18.02.2009 15:21:01
Я намерен использовать MSSQL более поздней версии.
StefanE 18.02.2009 15:29:12
@StefanE, файловая система - это, по сути, специализированная база данных, оптимизированная для хранения файлов.
LukeH 19.02.2009 01:11:26
10 ОТВЕТОВ
РЕШЕНИЕ

Храните изображения в файловой системе и расположение изображений в базе данных.

Почему? Потому что...

  1. Вы сможете подавать изображения в виде статических файлов.
  2. Нет доступа к базе данных или код приложения не потребуется для получения фотографий.
  3. Изображения могут быть поданы с другого сервера для повышения производительности.
  4. Это уменьшит узкое место в базе данных.
  5. База данных в конечном итоге хранит свои данные в файловой системе.
  6. Изображения могут быть легко кэшированы при сохранении в файловой системе.
172
10.06.2010 12:36:05
Кроме того, в SQL Server, когда вы сохраняете изображение как поле «Изображение», это фактически то, что делает SQL - хранит указатель на файл на диске где-нибудь. Вот как он преодолевает ограничение в 8 КБ.
Zhaph - Ben Duguid 18.02.2009 16:55:21
На самом деле эта проблема была решена в SQL Server 2008. Был представлен новый тип FILESTREAM technet.microsoft.com/en-us/library/bb895234.aspx, который позволяет использовать преимущества «производительности файловой системы и в то же время поддерживать». транзакционная согласованность между неструктурированными данными и соответствующими структурированными данными "
kristof 12.05.2009 13:25:28
Да, вы правы. мой вопрос какой размер капли? или сколько памяти он может хранить?
Ameer 4.03.2013 08:45:32

Лучше хранить файлы как файлы. Различные базы данных по-разному обрабатывают данные BLOB-объектов, поэтому, если вам придется перенастроить серверную часть, у вас могут возникнуть проблемы.

При обработке значений <img src = для файла, который уже существует на сервере, скорее всего, это будет быстрее, чем создание временного файла из поля базы данных и указание на него тега <img.

Я нашел этот ответ от поиска в Google вашего вопроса и прочтения комментариев на http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html

6
18.02.2009 15:21:20
упомянутый пост кажется немного устаревшим.
devio 18.02.2009 15:27:46

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

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

Используя сегодняшнюю технологию, я предлагаю вам хранить изображения в столбцах SQL Server 2008 FILESTREAM (по крайней мере, это то, что я собираюсь сделать со своим следующим проектом), поскольку они сочетают в себе преимущество хранения данных в базе данных и наличия больших двоичных файлов в отдельных файлах (в хотя бы по рекламе;))

11
18.02.2009 15:21:34
Вы уже тестировали функциональность Filestream?
StefanE 18.02.2009 15:36:48
На самом деле, при удалении записи БД, может быть также закодирован для удаления из файловой системы. Поэтому я считаю, что лучше хранить в FS, а не в DB
kailash19 11.12.2012 13:00:59

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

3
18.02.2009 15:22:31

Поговорка всегда была «Файлы в файловой системе, метаданные файлов в базе данных»

9
18.02.2009 15:24:04

я обычно хотел бы иметь двоичные файлы в базе данных, потому что:

  • целостность данных: нет файлов без ссылок, нет пути в БД без какого-либо связанного файла
  • согласованность данных: взять дамп базы данных и все. нет "О, я забыл targz этот каталог данных."
6
18.02.2009 15:26:26

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

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

С веб-стороны, я думаю, так как ваш вопрос помечен asp.net, что вы пошли бы по пути использования обработчика http для обработки изображений. Тогда у вас есть все преимущества инфраструктуры, и вы можете поддерживать чистоту логики домена, передавая ключ к своему изображению обработчику http.

0
18.02.2009 15:45:07

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

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

4
23.02.2009 10:25:10

Почему бы не выбрать отдельную базу данных NoSql для хранения ваших файлов.

Это дает вам целостность данных, согласованность данных, как упоминал @chburd.

В то время как вы rdbms по-прежнему держать маленький.

-1
9.11.2011 03:30:08
  1. Вот пошаговый пример (общий подход, реализация Spring Eclipse) хранения изображений в файловой системе и хранения их метаданных в БД - http://www.devmanuals.com/tutorials/java/spring/spring3/mvc /Spring3MVCImageUpload.html
  2. Вот также пример - http://www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files
  3. Также вы можете исследовать кодовую базу этого проекта - https://github.com/jdmr/fileUpload . Обратите внимание на этот контроллер.
-1
27.09.2015 11:37:29