Хранить фотографии в виде файлов или в базе данных для веб-приложения?
Мой вопрос довольно общий, и я знаю, что на него не может быть ответа 100%. Я создаю веб-решение ASP.NET, которое будет включать в себя множество фотографий и, надеюсь, значительный объем трафика. Я действительно хочу добиться производительности.
Должен ли я сохранять изображения в базе данных или в файловой системе? И независимо от ответа, меня больше интересует, почему вы выбираете конкретный путь.
Большое спасибо, Stefan
- Каковы преимущества файлов с отображением памяти?
- Каков наилучший способ получить исполняемый exe-путь в .NET?
- Как «нормализовать» путь с помощью boost :: filesystem?
- Есть ли способ в Java определить, является ли путь действительным, не пытаясь создать файл?
- Что такое файловая система Android?
DUPLICATE : Сохранение изображений в DB – Yea или Nay? , Как сохранить изображения в вашей файловой системе , Хранение небольшого количества изображений: blob или fs? и, возможно, некоторые другие.
КОММЕНТАРИЙ: Спасибо за много хороших ответов. Я пойду на решение, основанное на файлах, даже если мне нравится идея иметь 100% -ное решение для базы данных. Похоже, что сегодня есть хорошие решения для работы с базами данных и т. Д., Но у меня есть несколько причин не делать этого.
-
Я буду на размещенном решении, у меня есть огромное количество хранилища (10 гб), но всего 300 МБ для базы данных. Это будет стоить дорого для дополнительного хранения в БД.
-
Я не эксперт по БД и не контролирую настройки БД. Для решения на базе БД может потребоваться настраиваемая конфигурация.
Если мы перейдем на запуск сайта на нашем собственном сервере, я могу рассмотреть решение на базе БД. спасибо, Стефан
- Как программно изменить права доступа к файлам?
- Лучший способ определить, есть ли ссылка на два пути к одному файлу в C #
- Получить размер папки или файла
- WatchService для Java 6
- Java в Eclipse: где я могу поместить файлы в файловую систему, которые я хочу загрузить с помощью getResource? (например, изображения для ImageIcon)
- Где хранится хранилище файловой системы PERSISTENT с хромом?
- Можете ли вы вызвать Directory.GetFiles () с несколькими фильтрами?
- Установил ли Windows 7 ограничение доступа к файлу 255 символов?
Храните фотографии в файловой системе и местоположениях изображений в базе данных.
Зачем? Потому как…
- Вы сможете показывать изображения как статические файлы.
- Для получения снимков не требуется доступ к базе данных или код приложения.
- Изображения могут быть поданы с другого сервера для повышения производительности.
- Это сократит узкое место в базе данных.
- В конечном итоге firebase database хранит свои данные в файловой системе.
- Изображения можно легко кэшировать, если они хранятся в файловой системе.
В моих недавно разработанных проектах я хранил изображения (и все виды двоичных документов) как столбцы изображений в таблицах базы данных.
Преимущество наличия файлов, хранящихся в базе данных, очевидно, что вы не получаете ненужных файлов на жестком диске, если запись удалена, поскольку синхронизация между базой данных (= метаданных) и жестким диском (= файловая память) не встроена и его необходимо запрограммировать вручную.
Используя сегодняшнюю технологию, я предлагаю вам хранить изображения в столбцах FILESTREAM SQL Server 2008 (по крайней мере, это то, что я собираюсь делать с моим следующим проектом), поскольку они сочетают в себе преимущество хранения данных в базе данных и наличия больших двоичных файлов в отдельных файлах (в по крайней мере, согласно рекламе;))
Посвящение всегда было «Файлы в файловой системе, метаданные файлов в базе данных»,
Лучше хранить файлы в виде файлов. Различные базы данных обрабатывают данные Blob по-разному, поэтому, если вам нужно перенести свой задний конец, вы можете столкнуться с проблемами.
При обслуживании impages
Я нашел этот ответ из googling вашего вопроса и прочитал комментарии по адресу http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html
Мне обычно нравится иметь двоичные файлы в базе данных, потому что:
- целостность данных: нет файла без ссылок, нет пути в db без какого-либо связанного с ним файла
- согласованность данных: взять дамп базы данных, и все. no “O я забыл настроить этот каталог данных.”
Сохранение изображений в базе данных добавляет служебные данные БД для обслуживания одиночных изображений и затрудняет разгрузку в альтернативное хранилище (S3, Akami), если вы достигнете этого уровня. Хранение их в базе данных упрощает перемещение вашего приложения на другой сервер, так как теперь требуется только переместить базу данных.
Сохранение изображений на диске упрощает разгрузку в альтернативное хранилище, делает изображения статическими элементами, поэтому вам не нужно возиться с заголовками HTTP в своем веб-приложении, чтобы сделать изображения доступными для просмотра. Недостатком является то, что если вы когда-либо перемещаете свое приложение на другой сервер, вам нужно помнить, что нужно перемещать изображения; то, что легко забыть.
Для веб-приложений вы получите лучшую производительность за счет использования файловой системы для хранения ваших изображений. Это позволит вам легко реализовать кэширование изображений на нескольких уровнях в вашем приложении. Есть некоторые преимущества для хранения изображений в базе данных, но в большинстве случаев эти преимущества приходят с клиентскими приложениями.
Просто добавлю еще немного к уже хорошим ответам. По-прежнему можно получить преимущества кэширования как на уровне веб-сайта, так и на уровне базы данных, если вы пройдете маршрут, сохраняя изображения в базе данных.
Я думаю, что для базы данных вы можете достичь этого путем хранения изображений по отношению к связанным с ними текстовым данным, и если вы можете получить доступ к изображениям в конкретный запрос, чтобы firebase database могла кэшировать запрос (просто теория, хотя так не стесняйтесь разузнать меня в этой части).
С веб-сайтом, я бы угадал, так как вы задаетесь вопросом, с asp.net, что вы будете идти по пути использования обработчика http для обслуживания изображений. Тогда у вас есть все преимущества рамочной системы в вашем распоряжении, и вы можете сохранить очиститель логики домена, просто передав ключ к своему изображению обработчику http.
Почему бы не выбрать отдельную базу данных NoSql для хранения ваших файлов.
Это приносит вам целостность данных, согласованность данных, как упомянуто @chburd.
Пока вы rdbms по-прежнему остаются маленькими.
- Ниже представлен пошаговый пример (общий подход, реализация Spring,
Eclipse
) для хранения изображений в файловой системе и хранения их метаданных в БД – http://www.devmanuals.com/tutorials/java/spring/spring3/ MVC / Spring3MVCImageUpload.html - Вот пример: http://www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files
- Также вы можете исследовать кодовую базу этого проекта – https://github.com/jdmr/fileUpload . Обратите внимание на этот controller.