Мне нужно иметь возможность загрузить несколько файлов в базу данных и связать их с заданной записью в заданной таблице. Сначала я подумал о том, чтобы сжать все необходимые файлы и отправить полученный байтовый массив в качестве параметра вместе с оставшимися данными записи в хранимую процедуру, чтобы я мог быть уверен, что это действует как одна транзакция и что извлекаются все связанные файлы с заданной записью будет кусок пирога. Однако этот план не был принят по соображениям производительности, и теперь у меня есть два варианта:
Создайте структуру данных, которая оборачивает массив byte[]
, (двоично) сериализует его и отправляет вместе с данными; или
Сначала отправьте оставшиеся данные, поймайте идентификатор записи и отправьте каждый файл отдельно (связав его с данным идентификатором);
Теперь, 1) выглядит слишком похоже на мой первый план и, вероятно, будет отклонено, даже если на этот раз сжатие не будет задействовано. Вариант 2) кажется правильным, но я должен гарантировать, что я загружаю как данные записи, так и файлы в одной транзакции, что заставит меня внести изменения (хотя и незначительные) в мой слой данных. .
Если бы вы столкнулись с этой проблемой, какой вариант вы бы выбрали? Если ни один из тех, что я изложил выше, какой тогда?
Редактировать: База данных расположена на удаленном сервере. Файлы могут быть произвольно большими, хотя я не ожидаю, что они будут больше, скажем, 1-2 МБ. Хранение файлов в месте, доступном как приложению, так и серверу базы данных, не вариант, поэтому я не могу просто отправить пути к файлам в базу данных (они действительно должны храниться в виде больших двоичных объектов в базе данных).