Intereting Posts
Приложение Symfony2 очень медленное в VirtualBox Количество записей в DB PHP strip_tags () черный список, а не белый список Маршрутизатор Phalcon не реагирует на вложенные папки и декларацию пространства имен Nginx – скрипты PHP, не вызываемые из обратного прокси Преобразование php для преобразования отношения «один ко многим» к вложенным массивам Yii :: app () -> user-> id не возвращает пустой результат CakePHP 3 загрузки файлов поставщиков Действительно ли работает PHP filter_var FILTER_VALIDATE_EMAIL? nginx + WordPress: Правильные разрешения пользователя / файла для автоматического обновления SFTP +? Twilio – Как набрать номер третьей стороны и добавить его на конференцию? Как ассоциации определяются, когда код испечен в CakePHP «Загрузить больше» Получение еще 10 результатов Что такое Perl, эквивалентный print_r () PHP? Как изменить размер и преобразовать загруженное изображение в PNG с помощью GD?

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

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

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

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

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

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

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

Сказав это, я склоняюсь к какой-то файловой системе для документов по базе данных.

Преимущества:

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

Недостатки:

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

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

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