@Andranikk

Как лучше вести логи действий пользователей на сайте?

Всем привет!
Имеется небольшая онлайн игра, с очень простой системой: купил дерево -> собрал урожай -> продал урожай. Необходимо отслеживать и записывать все действия пользователей в результате которых менялся баланс аккаунта, то есть необходимо знать когда, с какого ip, какое действие было совершено, насколько был изменен баланс акаунта и сколько он составил после этого. Сначала подумал о записи в БД после каждой операции, но таблица выйдет слишком большая, поэтому подумал о записи в файл, при этом создать отдельный файл для каждого пользователя, в результате написал функцию:
public static function addLog($user, $event)
    {
        $file  = \Config::LOG_PATH . $user['id'] . '.log';
        $time  = date('Y.m.d H:i:s');
        $ip    = $_SERVER['REMOTE_ADDR'];
        $coins = (int) $user['coins'];
        $log   = "{$time}: {$ip}: {$coins}: {$event}\n";
        file_put_contents($file, $log, FILE_APPEND);
        return true;
    }

Хотелось бы знать насколько это правильно, не слишком ли простой/грубый/тупой способ?
  • Вопрос задан
  • 3616 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Это какой-то аналог fruitfarm?
Пишите лучше в базу.
К тому времени, как она станет слишком большой, вы, скорее всего, уже не один раз поменяете архитектуру.
Ответ написан
xSkyFoXx
@xSkyFoXx
Если событий не много (не десятки миллионов в день) - тогда пишите в базу и постарайтесь избегать индексы, иначе ваша база данных прикажет долго жить.
Если событий достаточно много (десятки миллионов в день) - задумайтесь о текстовых логах в csv или любом другом просто-интерпретируемом формате.
Если событий очень много (big data) или у вас имеется нагруженный SaaS - лучше использовать какую-либо централизованную систему, типа fluentd.

Мигрировать с одного подхода на другой по мере роста количества клиентов не возбраняется :) Но учтите, что считать аналитику по медленным источникам (файлы) дольше, чем по базе данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы