Проблема, о которой я здесь, чтобы поговорить и (спросить, конечно), не нова. Я искал переполнение сети и стека, и у меня появились идеи по многим аспектам этой проблемы (плюсы и минусы), но в моей голове все еще есть какая-то часть. Поэтому я подумал, что было бы неплохо поделиться в одном месте (конечно, он будет более полным с идеями других) и попросить об этом.Ведение журнала действий пользователей в приложениях
Проблема очевидна: «Мы хотим регистрировать каждое действие пользователя» - возможно, когда мы решаем большую проблему, более мелкие (например, для регистрации только одно действие будет куском торта).
Во-первых от того, что я прочитал через веб и стека переполнения:
Использование БД вместо файла: Это хороший совет, хотя это всегда зависит от ситуации. Но из-за многих преимуществ БД, в долгосрочной перспективе и в целом, это лучшее решение.
Уровень БД или прикладной уровень: На самом деле это зависит. Например, если вы хотите действительно контролировать все (я имею в виду, действительно, каждая строка, которая изменяется в базе данных, кажется, у нас будет один выбор «Использование триггеров базы данных». Хотя в MySQL много дискуссий, которые говорят, запускают замедление БД, и они советуем не использовать его. Таким образом, это зависит от уровня детализации, который вам нужен, вы можете поместить свою систему регистрации в DB Layer или Уровень приложения (для экзамена используется обычный вызов функции $ logClass-> logThis()).
Использование наблюдателей: Чистые коды всегда лучше. Если вы знакомы с наблюдателями, вы можете использовать их, чтобы делать что-то для вас, когда произошло действие, поэтому вам не нужно добавлять $ logClass-> logThis() каждый раз, когда CRUD происходит в вашем приложении.
Что нужно Log: Простой и короткий ответ: Исходя из ваших потребностей, но есть некоторые общие поля вам понадобятся:
- user_id (, если уникальный идентификатор пользователя доступен)
- метка времени (Unix может быть)
- ф (не все знают, как фальсифицировать это в первую очередь, так что используйте его, даже притворяется я т дать вам некоторое представление о поведении пользователей)
- action_id (должны быть предопределенные действия для лучшего объединяющим в запросах и отчетах)
- object_id (уникальный идентификатор строки из записи, что изменения были сделаны на)
- действие (, который мой вопрос об этой части)
- и т.д ...
Буду признателен, если кто-нибудь исправит меня, если я совершу ошибку в любой части или добавлю другую полезную информацию к этому сообщению, чтобы она стала одной из хороших ссылок для других пользователей.
И теперь мой вопрос: Как хранить действия?. Для лучшего понимания рассмотрите следующий сценарий.
У меня есть таблица под названием «продукт» и таблица под названием «компании». Из бизнес-логики мы хотим присвоить продукты компаниям, которые мы оказались в таблице «company_product». Теперь, когда пользователь вставить новый продукт и одновременно назначить его компании, 2 таблицы будут затронуты (то же самое для удаления и обновления): «продукт» и «company_product», и мы хотим знать:
- что вставлено?
- Что удалено?
- Что обновлено до чего?
Для проблемы производительности и потому, что не хватает знаний о триггерах, я хочу использовать протоколирование в прикладном уровне, так что я в конечном итоге с этой идеей, что я могу, сохранить поля действий по базе данных в массив или json структура. Но по мере того как я разработал свое решение, я столкнулся с проблемой: Как сделать этот журнал понятным для нетехнических пользователей? Так, например, я хочу, чтобы сохранить что-то подобное в действии поля базы данных, когда удаление (вставка) продукта с идентификатором 20:
action : [{id: 20, product_id:2, company_id: 1},{id: 21, product_id:2, company_id: 2}]
И это не то, что легко каждый читать и понимать. На самом деле я могу использовать этот JSON более читаемым и сделать это что-то вроде этого:
action : {'Product A Deleted From Company X', 'Product A Deleted From Company Y'}
и сохранить предыдущее действие в поле technical_action для дальнейшей диагностики, но это требует дополнительных работ и больше запросов для выполнения чего-то, что не всегда (log)
Я был бы признателен за любую дополнительную информацию по этой статье (я определенно уверен, что существуют другие критерии, которые могут обсуждаться), и ответьте на мой вопрос.
Прокомментируйте комментарий -1 на этом сообщении, поэтому я знаю, что не так с сообщением или контентом. спасибо :) – sobhan
Мне было интересно, так ли эта тема для всех, или мы не рассматриваем возможность входа в наши проекты? 2 дня и без участия сообщества! – sobhan