Хранение изображений: DB или файловая система -
Я прочитал несколько сообщений в этом отношении, но я до сих пор не понимаю, какое лучшее решение в моем случае.
Я начинаю писать новый webApp, и бэкэнд будет предоставлять около 1-10 миллионов изображений. (средний размер 200-500 кБ для одного изображения)
Мой сайт будет предоставлять контент и изображения 100-1000 пользователям одновременно.
Я бы также хотел, чтобы расходы на обслуживание были как можно ниже (но это вторичное требование).
Я думаю, что пространство файловой системы дешевле, чем стоимость DB.
Лично мне нравится идея иметь все мои изображения в БД, но любое предложение будет действительно оценено:)
Считаете ли вы, что в моем случае подход БД является правильным выбором?
Ответы
Ответ 1
Помещение всех этих изображений в вашу базу данных сделает его очень и очень большим. Это означает, что ваш движок БД будет занят кэшированием всех этих изображений (задача, на которую он не предназначен), когда он может кэшировать данные горячих приложений.
Оставьте кэширование файлов до ОС и/или вашего обратного прокси - они будут лучше на нем.
Ответ 2
Некоторые другие причины для хранения изображений в файловой системе:
- Серверы изображений могут запускаться, даже если база данных занята или недоступна.
- Файловые системы созданы для хранения файлов и являются довольно эффективными.
- Сброс данных в вашей базе данных означает замедление резервного копирования и других операций.
- Никакой код на стороне сервера, необходимый для обслуживания изображения, просто старый IIS/Apache.
- Вы можете увеличить скорость с помощью дешевых дешевых веб-серверов или, возможно, на CDN.
- Вы можете выполнять связанную работу (создание эскизов и т.д.) без привлечения базы данных.
- Ваш сервер базы данных может хранить больше "реальных" табличных данных в памяти, где вы получаете скорость базы данных для запросов. Если он использует свою драгоценную память для хранения кешированных файлов изображений, это не покупает вас практически ничто по сравнению с тем, чтобы иметь больше индекса фотографии в памяти.
Ответ 3
Большинство крупных сайтов используют файловую систему.
Смотрите Сохранение изображений в виде файлов или в базе данных для веб-приложения?
Ответ 4
При работе с двоичными объектами следуйте ориентированному на документ подходу для архитектуры, а не храните в базе данных документы, такие как PDF и изображения, в конечном итоге вам придется реорганизовать его, когда вы начнете видеть все проблемы с производительностью в своей базе данных. Просто сохраните файл в файловой системе и укажите путь внутри таблицы вашего файла данных. Существует также физическое ограничение размера типа данных, которое вы будете использовать для сериализации и сохранения в базе данных. Просто сохраните его в файловой системе и получите доступ к ней.
Ответ 5
В первом предложении говорится, что вы прочитали некоторые сообщения по этому вопросу, поэтому я не буду вдаваться в ссылки на статьи, которые охватывают это. По моему опыту и исходя из того, что вы указали в отношении количества изображений и размеров изображений, вы будете дорого платить за производительность БД, если будете хранить их в БД. Я бы сохранил их в файловой системе.
Ответ 6
Какую базу данных вы используете? MS SQL Server 2008 предоставляет хранилище FILESTREAM
позволяет хранить и эффективный доступ к данным BLOB с использованием комбинации SQL Server 2008 и файловой системы NTFS. Он охватывает варианты хранения BLOB, настройки Windows и SQL Server для использования данных FILESTREAM, соображения для объединения FILESTREAM с другими функциями и сведения о реализации, такие как разделение и производительность.
подробности
Ответ 7
Мы используем FileNet, сервер, оптимизированный для обработки изображений. Это очень дорого. Более дешевое решение - использовать файловый сервер.
Не рекомендуется хранить большие файлы на сервере базы данных.
Как уже упоминалось, храните ссылки на большие файлы в базе данных.