Каковы плюсы и минусы хранения файлов в базе данных?

Я пишу приложение php и задавался вопросом, не является ли плохой идеей хранить полные файлы в базе данных. Файлы должны быть около 100-200kb в основном текстовые файлы (txt, doc, docx и так далее) или небольшие файлы изображений. Или это просто неверная идея?

4 ответов


Pro: очень портативный.

Con: вы ничего не можете с ним сделать, используя SQL (индексирование, поиск и т. д.), И вам нужно будет добавить метаданные в другие столбцы (тип контента, имя файла и т. д.), Чтобы улучшить (повторно)удобство и ремонтопригодность.

Я бы не стал этого делать. Дисковая файловая система гораздо лучше подходит для этих задач.


плюсы:

  1. не нужно беспокоиться о разрешениях на запись в хранилище файлов.
  2. нет необходимости пытаться синхронизировать файлы на filestore со строками в базе данных, избегая потерянных файлов или сломанных ссылок. Например, можно автоматически каскадировать удаление файлов при удалении связанного содержимого.
  3. в некоторых базах данных (таких как Oracle и SQL Server) вы можете индексировать файлы и искать в них с помощью SQL
  4. не нужно беспокойтесь об уникальных именах файлов, папок, и это может сделать загрузку проще в некоторых случаях
  5. проще защитить доступ к файлам, чтобы их могли видеть только авторизованные пользователи

недостатки:

  1. производительность обслуживания файлов часто страдает по сравнению с filestore
  2. может привести к большим базам данных. При выборе двоичных столбцов необходимо соблюдать осторожность.
  3. больше работы для ссылки на файлы и обслуживания содержимого-вам нужно специализированные обработчики и т. д.

Это действительно зависит от ситуации?

  • как файлы будут распределили?
  • используются ли файлы автономно или они часть системы, которая может иметь собственное разрешение и логика аутентификации?
  • Whats ваш стратегия резервного копирования?
  • вам нужно репликация?
  • вам нужно поддержать a много ввода-вывода?
  • насчет кэширования?

сказав это, я бы наклонился к некоторым вид файловой системы для документов над базой данных.


лично мне нравится идея, особенно, если БД хранит их в сжатом или сжать их вручную.

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