Средство отслеживания ошибок PHP: хранение прикрепленных файлов

#php #mysql #sql #bug-tracking #attachment

#php #mysql #sql #отслеживание ошибок #вложение

Вопрос:

Дан проект отслеживания ошибок PHP с базой данных SQL (MySQL, PostgreSQL, Oracle …), который должен иметь возможность хранить прикрепленные файлы для каждой ошибки.

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

например

  • DB: ошибка в таблице будет содержать связанную таблицу bug_files, содержащую поле bug_id и поле filename, содержащее путь к файлу на диске
  • Диск: эффективное хранение файлов (избегая размещения слишком большого количества файлов в одном каталоге), например, автоматическое создание каталогов 1-1000, 1001-2000 и т.д. таким образом, мы можем иметь /1001-2000/1234/bugfile.jpg или случайных подкаталогов, таких как /z/e/x/q/1000_bugfile.jpg ?

… или есть более эффективные способы?

Спасибо.

Редактировать

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

Файлы будут перечислены / загружены через веб-приложение для отслеживания ошибок (=> HTTP upload / download).

Никто, кроме разработчиков / системных администраторов, не сможет просмотреть автоматически сгенерированную структуру каталогов (однако было бы удобнее иметь «понятную» структуру).

Ответ №1:

Я бы позволил файловой системе выполнять свою работу (хранилище файлов). Базы данных можно использовать для хранения файлов, но это (как правило) не так эффективно, например, данные файла могут быть помещены в буферы базы данных — это само по себе неплохо, но это может отнимать ресурсы у других таблиц, данных строк и снижать производительность других запросов.

Создание каталогов на основе значимой комбинации дат и названий проектов и т.д. помогло бы уменьшить потерю производительности при наличии большого количества файлов в одном каталоге.

Ответ №2:

Я бы настоятельно рекомендовал использовать распознаваемую структуру каталогов, возможно, даже основанную на дате, или что-то, что совпадает с (частями) вашего имени файла ошибки. Например, ‘20110506-bugfile’ будет в /2011/05/06/ Возможно, это немного не соответствует, и будет достаточно только 2011/05 / .

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

Немного другой вариант — добавить файл в вашу базу данных в таблице ошибка (http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/uploading-files-to-mysql-database.aspx ), тогда вам не нужно создавать структуру каталогов, НО это, конечно, не позволит вам находить файлы с помощью FTP.