FILESTREAM - ужасная опция для хранения изображений. Я удивлен, что MS когда-либо продвигал это.
В настоящее время мы используем его для наших изображений на нашем сайте. В основном пользователь генерирует изображения и любые связанные с CMS вещи, которые создают администраторы. Решение использовать FILESTREAM было принято до того, как я начал. Самая большая проблема связана с подачей изображений. Вам лучше иметь CDN, сидящий впереди. Если нет, то планируйте, что ваша система остановится. Конечно, на большинстве сайтов есть CDN, но вы не хотите, чтобы эта служба выходила из строя, что означает, что ваша система будет перегружена. Количество стресса на вашем сервере sql является главной проблемой здесь.
С точки зрения простоты резервного копирования. Ваш компромисс заключается в том, что ваш БД НАМНОГО БОЛЬШЕ и, следовательно, резервное копирование занимает больше времени. Потенциально, намного дольше, и система работает медленнее во время резервного копирования. Не говоря уже о том, что перемещение резервных копий занимает больше времени (т. Е. Восстановление данных prod в среде разработчика или на локальных машинах для целей разработки). Не используйте это как решающий фактор.
Большинство облачных сервисов имеют автоматическое резервирование любых файлов, которые вы храните в своей системе (т. Е. AWS S3 и BLOB-объект Azure). Если вы находитесь на предпосылке, просто убедитесь, что вы используете общее расположение для изображений и убедитесь, что это место резервируется. Я думаю, что лучший вариант - это настроить его так, чтобы каждое изображение (и другие типы файлов UGC) имели запись в вашей базе данных с путем к этому файлу. Идя дальше, выделите корневой путь в настройку конфигурации и сохраните только оставшийся путь вместе с записью. Например, корневой путь в конфигурации может быть базовым URL, общим диском или виртуальным каталогом или пустой записью. Тогда ваша запись может иметь "/files/images/image.jpg". Таким образом, если вы перемещаете свое хранилище файлов, вы можете просто обновить конфигурацию root. Я бы также предложил создать интерфейс FileStoreProvider (Singleton), который можно использовать для управления (сохранения, удаления, обновления) этих файлов. Таким образом, если вы переключаетесь между AWS, Azure или в помещении, вы можете просто создать нового поставщика.