Вопрос

Я прочитал несколько сообщений по этому поводу, но до сих пор не понимаю, какое решение лучше в моем случае.

Я начинаю писать новое веб-приложение, и серверная часть предоставит примерно 1–10 миллионов изображений.(средний размер 200-500КБ за одно изображение)

Мой сайт будет предоставлять контент и изображения для 100-1000 пользователей в то же время.

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

Лично мне нравится идея хранить все мои изображения в базе данных, но любое предложение будет очень оценено :)

Считаете ли вы, что в моем случае подход с БД — правильный выбор?

Это было полезно?

Решение

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

Оставьте кеширование файлов до ОС и / или вашего обратного прокси-сервера - они будут лучше в этом.

Другие советы

Еще несколько причин хранить изображения в файловой системе:

  • Серверы изображений могут работать, даже если база данных занята или не работает.
  • Файловые системы созданы для того, чтобы хранить файлы и вполне эффективны в этом.
  • Сброс данных в вашей базе данных означает замедление резервного копирования и других операций.
  • Для обслуживания изображения не требуется никакого серверного кода, просто старый добрый IIS/Apache.
  • Вы можете масштабироваться быстрее с помощью дешевых веб-серверов или, возможно, с помощью CDN.
  • Вы можете выполнять сопутствующие работы (создание эскизов и т. д.), не задействуя базу данных.
  • Ваш сервер базы данных может хранить больше «реальных» табличных данных в памяти, откуда вы получаете скорость обработки запросов к базе данных.Если он использует свою драгоценную память для хранения файлов изображений в кэше, это вряд ли принесет вам что-либо с точки зрения скорости по сравнению с наличием большего количества индекса фотографий в памяти.

Большинство крупных сайтов используют файловую систему.

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

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

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

Какую базу данных вы используете? MS SQL Server 2008 предоставляет хранилище FILESTREAM

  

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

подробности

Мы используем FileNet, сервер, оптимизированный для работы с изображениями. Это очень дорого. Более дешевое решение - использовать файловый сервер.

Пожалуйста, не рассматривайте возможность хранения больших файлов на сервере базы данных.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top