Есть веские основания для беспокойства с обеих сторон, поэтому всегда задавайте свои требования. Сколько данных, сколько изображений, сколько?
Встроенное / BLOB-хранилище
Upside : упрощает архитектуру и реализацию, упрощает резервное копирование и восстановление или миграцию системы; просто сделайте дамп, сделайте резервную копию, экспортируйте (какой бы ни был термин для вашего вида БД) и переместите его в новую базу данных. Управление версиями / согласованность обрабатываются БД, поэтому допускает восстановление на определенный момент времени. Безопасность и контроль доступа также более понятны, поскольку доступ к BLOB-изображению является неотъемлемым атрибутом доступа к общему ряду. Перемещение изображения за пределы БД и предоставление возможности серверу HTTP извлекать его, хотя и лучше для параллелизма и масштабируемости, могут иметь проблемы с гарантией того, что люди не смогут взломать URL-адреса и запросить изображения, которыми они не владеют. Если вы размещаете их вне БД, убедитесь, что любая из ваших политик безопасности охватывает контроль доступа к изображениям между пользователями. Либо аутентификация вашего HTTP-сервера должна интегрироваться с общей аутентификацией системы, либо ваша программа HTTP-сервера, которая обслуживает изображения, использует какой-то механизм сеанса, чтобы гарантировать, что HTTP-запрос действителен. Это очень большая проблема в мультитенантных базах данных. Меньше проблем в одноцелевых однопользовательских системах с простой аутентификацией.
Недостатки : Для действительно ДЕЙСТВИТЕЛЬНО больших баз данных резервное копирование и восстановление становятся разочаровывающими, или даже проблемными и дорогостоящими, поскольку в противном случае у вас может быть небольшой базовый набор данных, у вас может быть много ГБ или ТБ образа данные. Рассматривать все это как единую согласованную базу данных хорошо с точки зрения целостности, но плохо для резервного копирования, если вы не используете СУБД с корпоративным качеством, настраиваемым резервным копированием и восстановлением хранилища данных (например, Oracle RMAN и скользящие резервные копии).
Всегда учитывайте время восстановления в любой системе. Если ваши требования к хранилищу составляют <несколько гигабайт, скажем даже 50-100 ГБ, и у вас запланировано достаточно места для резервного копирования, встроенное хранилище будет чище. Кроме того, разделение проблем и предоставление файловой системе своей работы становится ключевым преимуществом. Нет ничего хуже, чем пытаться восстановить, восстановить и открыть огромную базу данных ради небольшой ошибки данных. Время восстановления было бы моей самой большой проблемой. </p>