Комментарии 21
Почему бы не воспользоваться профильным решением в виде файлового хранилища на cepf/minio/etc? Все библиотеки есть под c#.
В нашем учебном заведении , по какой-то причине требуется сохранение именно следующим образом (как показано в примере). Исходя из этого я и написал статью, не смотря на существование профильных решений
Давно студентов заставляют писать статьи на хабр?
Вроде всегда так было, они за это оценки получают
Напомнило https://habr.com/ru/company/habr/blog/595067/
Всё началось в ноябре 2019...
В нашем учебном заведении , по какой-то причине требуется сохранение именно следующим образом (как показано в примере). Исходя из этого я и написал статью, не смотря на существование профильных решений
Можна было и добавить альтернативное решение.
Или же можно использовать FILESTREAM, раз уж всё равно используется MS SQL Server...
Ну и System.Drawing точно тянуть не нужно.
Изображения почти всегда огромные объекты по меркам шарпа. Возьмите за практику не материализовывать такие штуки в массив. Везде: в файлах, в web запросах, в запросах к бд изображение выгодно пробросить как стрим. Вы будете приятно удивлены результатом и будете вопрошать "почему я не сделал этого раньше" )
Ага, только нужно тоже понимать, что можно тянуть Stream, а там под катом MemoryStream... Хороше если там будет что-то вроде RecyclableMemoryStream
Решение раздувает базу, замедляет работу.
Смоделируйте нагрузку - сгенерите 100,000 бинарников и замерьте разницу во времени ответа и загрузке проца сервера.
Используйте FILESTREAM: SQL Server хранит картинки как файлы на диске, а ссылки в базе.
А еще можно хранить файлы на ФС, а ссылки в базе :)
Можно.
Задача усложняется контролем доступа - в FILESTREAM занимается SQL Server, а в при хранении отдельно - придется заниматься разработчику, включая проблемы безопасности, целостности.
Проходил и бинарник а таблице, в далекие 00, и файлы по-отдельности, когда миллионы документов, и FILESTREAM.
Бинарник а таблице - самое неудачное решение. :)
О, курсовые на хабр подъехали.
О господи вы ещё пользуетесь SQL Server'ом. О господи они хранят бинари в базе. Продолжите список... :)
О господи, в конце 2022 пишут статью как хранить бинари в базе SQL Server. :)
Сохранять в бд путь до картинки не самый оптимальный выход из ситуации, так как это будет работать локально на одном пк и то не всегда
Кто мешает делать это на сервере?
Что значит "не всегда"?
Хранение изображений в БД обычно считается антипаттерном по ряду причин:
реляционные базы данных (такие как MS SQL) прежде всего работают в рамках транзакционной модели управления данными - вовлечение BLOB-ов в такую модель снижает её эффективность
доставка изображений на фронтенд из БД всегда накладнее, чем доставка из файловых хранилищ
доставку изображений на фронтенд сложнее масштабировать (нет возможности использовать CDN)
если вам критически важны ваши данные и ваш MS SQL работает в режиме восстановления Full, то все ваши изображения попадут в транзакционный журнал - его размер будет стремительно расти и расходы на его обслуживание возрастут кратно
изображения стремительно увеличивают размер БД, что приводит к деградации производительности
Сохранение изображения в БД C#