Лучшие практики для смешанного использования СУБД и файлов в файловой системе - PullRequest
1 голос
/ 01 ноября 2011

В одной из таблиц в схеме, над которой я работаю, мне нужно иметь дело с парой тысяч «листов данных», которые в основном представляют собой документы PDF, а иногда и файлы графических изображений, такие как PNG, JPG и т. Д. Схема моделирует портал дистрибьютора электроники, где новые продукты часто добавляются в их портфолио.

Эти документы (технические паспорта) добавляются во время выпуска нового продукта, но время от времени они нуждаются в обновлениях (например, из-за более новой версии документа, а не самого продукта), поэтому я ' я думаю, что обновление является асинхронной процедурой.

Учитывая это, я должен хранить только имя файла / путь к таблицам данных (и аналогичным документам) в моей таблице, с фактическим файлом, находящимся в файловой системе, или я должен использовать подход BLOB-объектов. Я почти уверен, что это должен быть прежний подход, но все же хотел бы посоветоваться с сообществом и посмотреть, есть ли какие-то подводные камни, на которые стоит обратить внимание.

1 Ответ

1 голос
/ 05 ноября 2011

Для полноты позвольте мне упомянуть, что некоторые базы данных позволяют использовать «гибрид» этих двух подходов, например Oracle BFILE или MS SQL Server FILESTREAM .

Существует также интересное обсуждение в Ask Tom хранения файлов в Oracle BLOB (в двух словах: "BLOB лучше файлов").


BTW,вам не обязательно выбирать один из другого ... Если вы можете позволить себе нехватку памяти и работаете в среде, доступной в основном для чтения, вы можете сохранить "основные" данные в BLOB для целостностино «кэшируйте» те же данные в файле для быстрого доступа только для чтения.Некоторые соображения:

  • Вам необходимо убедиться, что файл обновлен / удален, если BLOB обновляется / удаляется.
  • Рассмотрите возможность создания / обновления файла по требованию.
  • Рассмотрите возможность удаления старых файлов из "кэша", даже если соответствующие большие двоичные объекты все еще существуют.
  • Рассмотрите возможность использования нескольких "кэшей" (например, если у вас средний уровень и он распределен по нескольким физическим машинам, каждая машинаможет иметь свой собственный файловый кеш).
  • И, наконец, вам нужно убедиться, что все это работает надежно в параллельной среде.

Итак, это не самый простой подходно, в зависимости от ваших потребностей, может быть хорошим компромиссом между целостностью, производительностью и усилиями по реализации.

...