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






Я бы использовал базу данных просто для удобства обслуживания - также несколько изменений в файле могут привести к тому, что некоторые из них будут пропущены.
Вы почти наверняка захотите использовать базу данных для гибкого доступа на основе записей и воспользоваться возможностью базы данных обрабатывать одновременный доступ к данным. Если вам нужно отслеживать информацию, которую, возможно, потребуется отменить, ее наличие в структурированном формате является преимуществом, равно как и возможность обновлять строку, указывающую, когда и кем данная транзакция была отменена.
Скорее всего, вы захотите записать в файл только в том случае, если проблема связана с очень высокой производительностью или если у вас очень неструктурированные или большие объемы данных на запись, которые может быть нежелательно хранить в базе данных. Обратите внимание: если ваше приложение не имеет очень большого количества транзакций, скорость базы данных вряд ли будет проблемой. Также обратите внимание, что если вы работаете с файлом, вам необходимо очень осторожно обрабатывать одновременный доступ (чтение / запись / блокировка), что, вероятно, не является чем-то, с чем вы хотите иметь дело.
Я поддержу оба приведенных выше предложения и добавлю, что блокировка файлов в журнале плоских файлов может вызвать проблемы при большом количестве пользователей.
Есть по крайней мере одна определенная причина для сохранения в базе данных. Вы можете использовать INSERT DELAYED в MySQL (или аналогичные конструкции в других базах данных), который немедленно возвращается. Вы не получите никаких возвращаемых данных из базы данных с такими запросами, и их применение не гарантируется.
Используя INSERT DELAYED, вы не сильно замедляете работу своего приложения из-за ведения журнала. База данных может свободно записывать INSERT на диск в любое время, поэтому она может связывать несколько вставок вместе.
Вам нужно остерегаться использования встроенной в MySQL функции отметки времени (например, CURRENT_TIMESTAMP или CUR_DATE ()), потому что они будут вызываться всякий раз, когда запрос фактически выполняется. Поэтому вы должны убедиться, что каждый раз данные генерируются на вашем языке программирования, а не в базе данных. (Этот абзац может быть специфичным для MySQL)
не гарантировано? это звучит как не такая уж хорошая идея. не могли бы вы это объяснить?
Я большой поклонник log4php. Это дает вам стандартный интерфейс для регистрации действий. Он основан на log4j. Библиотека загружает центральный файл конфигурации, поэтому вам никогда не придется изменять код, чтобы изменить ведение журнала. Он также предлагает несколько целей журналов, таких как файлы, системный журнал, базы данных и т. д.
Для меня это в новинку. Очень красиво.