Лучше всего использовать: MySQL колонка или проверка файла для обнаружения изображения? - PullRequest
1 голос
/ 20 июля 2011

У меня всегда есть дилемма: для записи я могу использовать изображения столбцов (tinyint), которые имеют значение true, если для этой записи есть изображение, или false, если его нет.

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

Оба, конечно, дают одинаковые результаты.Наличие в базе данных означает сохранение состояния образа отдельно от реального образа на диске, более трудное для программирования и более подверженное ошибкам (образ диска больше не существует, в базе данных запись имеет значение true для образа столбца).

Поэтому я обычно использую проверку диска.Но это произошло со мной, может быть, это жестко сказывается на доступе к диску.Я знаю, что проверка базы данных должна быть быстрее, я все равно должен удалить запись из базы данных.Но ищет ли изображение с использованием файловой системы так плохо, как это происходило со мной или нет?

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

Плюсы для хранения в базе данных:

  • Вы можете создавать запросы, которые отвечают на вопросы типа "Дайте мне все объекты без изображения"
  • Это намного быстрее, чем вы делаетене нужно прикасаться к диску

Я не вижу плюсов только для хранения его на диске.Используйте шаблон с «единственным местом ответственности», означающим, что только одно место в вашем коде сохраняет, обновляет, удаляет изображения.В этом месте вы обновите файл и базу данных.Сделанный таким образом, он не очень подвержен ошибкам.

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

2 голосов
/ 20 июля 2011

По моему мнению, проверка на диске является расточительной и немного плохой практикой. БД должна содержать это, потому что:

  • Это намного быстрее.
  • Поиск на диске, который не извлекает Разыскиваемая запись должна рассматриваться как ошибка (которая также может быть принята заботиться о элегантно, конечно).

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

1 голос
/ 20 июля 2011

Изображения с большей вероятностью присутствуют или, скорее всего, отсутствуют? Если вы видите, существует ли файл, вы всегда будете использовать файл?

Если ответ на оба вопроса "да", то обязательно используйте диск. Если у вас есть основания полагать, что это будет подавляющее большинство времени, тогда используйте @file и обрабатывайте возврат FALSE (тем более, что file_exists может иметь проблемы кросс-платформенной реализации). Я бы посчитал это более чем адекватной практикой.

Если нет, то вам нужно посмотреть на поток вашей программы:

Задать вопрос базе данных - существует ли файл?

  • yes = получить файл.
    • Если файл на самом деле не нужен, сделайте что-нибудь, предполагая, что файл существует
    • else fetch file => удалось ли получить файл? (вы делаете эту проверку даже с запросом БД)
      • да = сделать что-нибудь с файлом
      • no = обновить базу данных и сделать что-нибудь без файла.
  • no = сделать что-нибудь без файла. (когда будет обновлено существование файла? cron?)

Если вы планируете использовать файл, у вас есть , чтобы проверить наличие файла, если БД говорит, что это там, что означает, что единственный раз, когда вы можете оптимизировать использование БД, - это когда сам файл не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...