2010-11-25 1 views
0

Что лучше хранить файл? Непосредственно хранить файл в базе данных или просто поместить в этот файл?Должен ли я хранить файл в базе данных или просто поместить в этот файл?

+0

Какую базу вы используете? – 2010-11-25 02:53:49

+0

Я удивлен - этот вопрос все еще находится в открытой дискуссии/дебатах? И это не дубликат, хммм ... – 2011-03-12 04:54:22

ответ

2

Когда вы принимаете ответы так быстро, вы не получаете преимуществ от ответов от более широкой аудитории.

Это зависит. Вам нужно рассмотреть несколько вещей.

  1. Если у вас есть бесплатная база данных микки мыши, а это означает, что он не обрабатывает сгустки надлежащим образом (читать сгустки на каждом SELECT,, не хранить капли в отдельной области), хранить файлы вне.

  2. Если у вас есть корпоративная база данных, это не проблема, чтобы сохранить капли внутри базы данных. Они не читают капли на каждом SELECT. Одно дополнительное чтение, чтобы получить blob, не является проблемой «производительности».

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

  4. Недостаток сохранения блоков в базе данных заключается в том, что резервные копии вашей базы данных будут намного больше. Некоторые базы данных предприятий отмечают, что страница не изменилась и исключает ее из инкрементных резервных копий; другие не имеют прироста.

  5. Преимущество сохранения блоб в базе данных - это данные и ссылочная целостность. У вас не будет проблемы с синхронизацией строк с блобами.

    • Я завершил заявку в прошлом году, когда в cust было 130GB данных в db и 700GB документов, хранящихся вне db. После десяти лет проблем, они укусили пулю и переместили документы в дБ. Угадайте, что должно было быть простой работой (длинной, но простой), потому что ссылки должны были быть абсолютно правильными, в итоге оказались массивными, потому что было так много дубликатов и недопустимых ссылок. Результирующая база данных составляла 630 ГБ, было 100 Гб обманов. 2K.

Ответы Комментарии

  1. Slash или Backslash
    Easy. В базе данных только слэш. Вам нужен способ идентификации целевой системы и индикатор IsWindoze. Он должен быть выше в иерархии таблицы, а не на уровне, где вы находите Filename. Если индикатор установлен, всякий раз, когда вы сообщаете или показываете столбец Filename, измените косые черты на обратную косую черту.
    У вас будет аналогичная проблема с DriveLetter и двоеточием, которого у Unix нет.
4

Избегайте хранения файлов в вашей базе данных. Большинство из них не справляются с ними хорошо.

+1

Просто чтобы добавить, это, как правило, плохая идея - единственное время, когда она становится даже отдаленно жизнеспособной, - это когда вы имеете дело с базой данных, где вы можете гарантировать, что запись будет в памяти когда вам это нужно, и, таким образом, оттуда. Но практически в любой ситуации файловая система - лучшее место для нее. – Arantor 2010-11-25 02:58:36

0

Предпочтительным способом является сохранение файла в файловой системе и сохранение местоположения файла в базе данных. Причины этого связаны с тем, как базы данных физически распределяют пространство на диске (обычно в 8k или 16k chunks). Удаление больших файлов там приводит к тому, что ваша база данных использует разные механизмы для хранения файлов (SQL Server называет это row overflow data). Обычно эти типы страниц находятся вне нормальной таблицы, поэтому каждое логическое чтение строки приводит к двум физическим чтениям на диске. Излишне говорить, что это плохо для производительности.

1

Поздний ответ: это зависит от вашего двигателя.

  • Размер страницы 2k не использовался с 1990-х годов для SQL Server. Oracle по умолчанию имеет значение 8K, SQL Server - 8K. Только Sybase AFAIK все еще в прошлом веке.

  • SQL Server теперь предлагает FILESTREAM, который сочетает в себе лучшее из обоих миров, так как Oracle сделала дольше с BFILE

  • SQL Server и предложение Oracle на диске и сжатие резервных копий

I» m sure PostgresSQL по крайней мере предлагает аналогичные функции.

Примечание: это в основном предложить альтернативы PerformanceDBA's FUD

Смежные вопросы