#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.