Который является лучшим методом для хранения изображений - папка или SQL Server как двоичный файл?

Я планирую разработку приложения фотогалереи для клиента. Я разрабатываю приложение в asp.net 3.5 и хотел бы разработать его так, чтобы я мог снова использовать приложение через несколько платформ с помощью различных фронтендов. В основном я задаюсь вопросом, что является недостатками и преимуществами хранения изображений в базе данных как двоичные файлы в противоположность тому, чтобы просто хранить файлы в папке приложения.

Любой совет значительно ценился бы!

Спасибо, Tristan

14
задан marc_s 9 February 2010 в 16:49
поделиться

5 ответов

Недостатком двоичного хранения является то, что вы увеличиваете размер базы данных до невероятных размеров. Если бы вы использовали экспресс-выпуск SQL Server, который ограничен 4 ГБ на базу данных, ваша фотогалерея довольно скоро «закончится».

Преимущество состоит в том, что вы можете легко управлять ограничениями доступа для каждого файла и для каждого пользователя. Вы просто смотрите на права пользователя и решаете, вернете ли вы изображение или нет.

6
ответ дан 1 December 2019 в 08:52
поделиться

SQL Server 2008 поддерживает хранилище FILESTREAM .

Файлы хранятся на томе NTFS как простые файлы, но подлежат контролю транзакций и могут быть доступны через специальные имена файлов, переданные функциям Win32 API (и, конечно, любой API , построенный на нем) с дополнительными проверками безопасности SQL Server (например, параметры GRANT и т. д.).

18
ответ дан 1 December 2019 в 08:52
поделиться

Если вы отправляете внутренний опрос, который требует 100% участия сотрудников вашей компании, то лучшим маршрутом было бы просто иметь форму отслеживания ответчиков ID/Username/email и т.д. Каждые несколько дней или около того просто отправляйте приятное напоминание по электронной почте тем в вашей организации, чтобы завершить опрос... вы, вероятно, даже могли бы автоматизировать это.

-121--1155434-

Только классы Form и UserControl имеют дизайнеров, которые позволяют редактировать дочерние элементы управления во время разработки. Создание собственного дизайнера, чтобы дать SplitContainer такое же поведение, не совсем просто, прежде всего потому, что это так плохо документировано и трудно отлажено. Вам нужно изучить код рамки с Reflector, чтобы получить его правильно.

Устраните эту проблему, поместите SplitContainer в пользовательский элемент управления. Задайте для свойства «Док» значение «Заливка». Теперь это легко.

-121--3894422-

место хранения файловой системы обеспечивает гораздо более высокую производительность при сохранении и обслуживании образов и поддерживается на каждой платформе. Если вы можете жить без безопасности и транзакционных вкусностей, которые вы получаете из места хранения БД, то я бы пошел с файловой системой.

4
ответ дан 1 December 2019 в 08:52
поделиться

Эти дебаты ведутся почти в любом сообществе SQL Server на протяжении веков. есть веские аргументы для обеих сторон, и определенно не существует универсального ответа. Это действительно зависит от вашей индивидуальной ситуации и многих факторов, таких как количество пользователей, средн. размер файла, частота обновления, соотношение чтения / записи, дисковая подсистема yadayadayada ...

Но, как вы упомянули, SQLExpress, вероятно, наиболее важным фактором является ограничение максимального размера базы данных, и это очень хорошая причина для использования подхода файловой системы . В любом случае, эта исследовательская статья может быть вам интересна: В BLOB или не в BLOB: Хранилище больших объектов в базе данных или файловой системе?

Раньше этот документ размещался на сайте Microsoft Research здесь: http://research.microsoft.com/apps/pubs/default.aspx?id=64525 , но эта ссылка у меня не работает. С тех пор SQL Server прошел долгий путь. Квассной уже упоминал, например, FILSTREAM.

1
ответ дан 1 December 2019 в 08:52
поделиться

У нас было большое LOB-приложение, которое предоставляло кассирам банка идентификационную информацию о члене, стоящем перед ними. Наши текстовые данные хранились в SQL Server. Данные изображения хранились в файлах. Поле базы данных просто имело имя файла. Этот подход хорошо работает, если вы находитесь за брандмауэром. Читать и писать файлы очень просто. Проблема в управлении файлами. Вы должны защитить файловую систему, чтобы случайные люди не могли просматривать каталог. Кроме того, резервное копирование более сложных файлов изображений. Вы должны сделать резервную копию базы данных и файлов изображений. Поля могут ссылаться на пути, которые больше не существуют. Например, какой-то ИТ-чувак решает переместить папку с изображениями, и теперь все ссылки в базе данных не работают. Если вашему приложению необходимо передавать информацию через брандмауэр, я бы предложил хранить изображения в SQL Server, используя упомянутое хранилище FileStream.

Сохранение изображений в базе данных избавило бы нас от некоторых проблем. Нам нужно было бы только сделать резервную копию базы данных, это было бы более безопасно, ссылки никогда не сломались бы, и нам не пришлось бы перепрыгивать через обручи, чтобы получить файлы из сети за пределами брандмауэра.

2
ответ дан 1 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: