Зберігання файлу в базі даних на відміну від файлової системи?


83

Як правило, наскільки поганим результатом виконання є збереження файлу в базі даних (зокрема, mssql) на відміну від файлової системи? Я не можу придумати причину поза переносимістю програм, що я хотів би зберігати свої файли як варбінарні файли в SQL Server.

Відповіді:


77

Погляньте на цю відповідь:

Зберігання зображень у БД - так чи ні?

По суті, простір та показники продуктивності можуть бути досить великими, залежно від кількості користувачів. Крім того, майте на увазі, що веб-сервери дешеві, і ви можете легко додати більше, щоб збалансувати навантаження, тоді як база даних є найдорожчою та найскладнішою частиною веб-архітектури, як правило.

Є кілька протилежних прикладів (наприклад, Microsoft Sharepoint), але, як правило, зберігання файлів у базі даних не є гарною ідеєю.

Якщо, можливо, ви не пишете настільні програми та / або не знаєте приблизно, скільки користувачів у вас коли-небудь буде, але на такому випадковому та непередбачуваному, як загальнодоступний веб-сайт, ви можете заплатити високу ціну за зберігання файлів у базі даних.


36

Якщо ви можете перейти на SQL Server 2008, ви можете скористатися підтримкою FILESTREAM, яка надає вам найкраще з обох - файли зберігаються у файловій системі, але інтеграція бази даних набагато краща, ніж просто зберігання шляху до файлу в полі varchar. Ваш запит може повернути стандартний потік файлів .NET, що значно полегшує інтеграцію.

Початок роботи з FILESTREAM Storage


1
У мене тут є деякі застереження. Зокрема, масштабність та доступність речей: як ви контролюєте, де зберігаються ці "краплі"?
Dave Van den Eynde

3
Масштабованість та доступність, здається, були досить добре продумані - див. Цей довідковий документ
Джон

2
Одним застереженням є те, що при підключенні до бази даних потрібно використовувати інтегрований захист (тобто автентифікацію Windows): blogs.msdn.com/b/psssql/archive/2008/04/10/…
Свен Гросен

22

Я б сказав, це залежить від вашої ситуації. Наприклад, я працюю в органах місцевого самоврядування, і у нас є багато зображень, таких як знімки тощо. Ми не маємо великої кількості користувачів, але ми повинні мати хороший захист та аудит даних. База даних є кращим рішенням для нас, оскільки це робить це простіше, і ми не будемо стикатися з проблемами масштабування.


6

У чому тут питання?

Сучасні СУБД SQL2008 мають безліч способів роботи з BLOB-файлами, які не просто вписуються в них у таблиці. Звичайно, є плюси і мінуси, і, можливо, вам доведеться подумати про це трохи глибше.

Це цікава стаття пізнього (?) Джима Грея

BLOB чи ні BLOB: зберігання великих об’єктів у базі даних або файловій системі


3

З мого власного досвіду, завжди краще зберігати файли як файли. Причина полягає в тому, що файлова система оптимізована для зберігання файлів, тоді як база даних - ні. Звичайно, є деякі винятки (наприклад, багатовітна файлова система MS наступного покоління повинна бути побудована поверх SQL сервера), але загалом це моє правило.


3

Незважаючи на те, що продуктивність є проблемою, я думаю, що сучасні конструкції баз даних значно зменшили проблему для невеликих файлів.

Окрім продуктивності, це також залежить від того, наскільки тісно пов’язані дані. Якщо файл містить дані, які тісно пов'язані з полями бази даних, то він концептуально належить близько до нього і може зберігатися в BLOB-пам'яті. Якщо він містить інформацію, яка потенційно може стосуватися декількох записів або може мати певне використання поза контекстом бази даних, то вона належить поза. Наприклад, зображення на веб-сторінці отримується за окремим запитом від сторінки, що посилається на нього, тому воно може належати зовні (залежно від конкретного дизайну та міркувань безпеки).

Нашим компромісом, і я не обіцяю, що це найкраще, було зберігання невеликих файлів XML у базі даних, але зображень та інших файлів поза нею.


Що ви вважаєте малим чи великим файлом?
ubiquibacon


1

Я згоден з @ZombieSheep. Ще одне - я взагалі не думаю, що бази даних насправді повинні бути портативними, оскільки ви пропускаєте всі функції, які надає постачальник СУБД. Я думаю, що перехід до іншої бази даних був би останнім, що слід було б розглянути. Тільки мої $ .02


1

Накладні витрати на синтаксичний аналіз blob (зображення) на байтовий масив, а потім записування його на диск із відповідним іменем файлу, а потім його читання достатньо накладних звернень, щоб відмовити вас робити це занадто часто, особливо якщо файли досить великий.


1
Я не бачу ніде згадуваного, що цей "файл" потрібно записати на диск і прочитати ще раз.
Дейв Ван ден Ейнде

Це неявне завдання, коли зображення потрібно відображати пізніше, особливо коли вони зберігаються в різних форматах або в сценаріях, коли вони не можуть триматися в пам’яті протягом тривалого періоду часу в силу простого розміру.
Джон Лімджап,

0

Щоб не бути розпливчастим чи що-небудь, але я думаю, що тип "файлу", який ви будете зберігати, є одним з найбільших визначальних факторів. Якщо ви, по суті, говорите про велике текстове поле, яке може зберігатися як файл, моя перевага буде для зберігання в базі даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.