Два требования определяют ответ на ваш вопрос:
- Существует ли более одного сервера приложений, считывающего двоичные файлы с сервера базы данных?
- Есть ли у вас соединение с базой данных, которое может передавать двоичные файлы для записи и чтения?
Несколько серверов приложений, извлекающих двоичные файлы из одного сервера базы данных, действительно ограничивают ваши возможности масштабирования. Учтите, что соединения с базой данных обычно - обязательно - приходят из меньшего пула, чем пул обслуживания запросов серверов приложений. Кроме того, двоичные файлы тома данных будут потреблять отправку с сервера базы данных на сервер приложений по каналу. Сервер базы данных, скорее всего, будет ставить запросы в очередь, поскольку его пул соединений будет использоваться для доставки двоичных файлов.
Потоковая передача важна для того, чтобы при чтении или записи файл не полностью находился в памяти сервера (похоже, ответ @ Эндрю о SQL Server 2008 FILESTREAM может говорить об этом). Представьте себе файл размером в несколько гигабайт - если его полностью прочитать в память - этого будет достаточно для сбоя многих серверов приложений, которые просто не имеют физической памяти для размещения. Если у вас нет потоковых соединений с базой данных, хранение в базе данных действительно нежизнеспособно, если только вы не ограничите размер файла таким образом, чтобы программное обеспечение сервера приложений выделило как минимум столько же памяти, сколько максимальный размер файла * количество соединений для обслуживания запросов + некоторые дополнительные накладные расходы.
Теперь предположим, что вы не помещаете файлы в базу данных. Большинство операционных систем очень хорошо кешируют часто используемые файлы. Так что сразу вы получите дополнительную выгоду. Кроме того, если вы работаете с веб-серверами, они довольно хороши в отправке правильных заголовков запросов, таких как тип mime, длина контента, электронные теги и т. Д., Которые в противном случае вы сами закодируете. Реальные проблемы - это репликация между серверами, но большинство серверов приложений довольно хорошо справляются с этим через http - потоковую передачу для чтения и записи, и, как отметил другой автор, поддержание синхронизации базы данных и файловой системы для резервного копирования.