Отслеживание количества пользователей, вошедших в систему за определенный период времени - дизайн базы данных - PullRequest
1 голос
/ 12 ноября 2010

В нашем приложении мы храним наибольшее количество пользователей онлайн.Мы делаем это, отслеживая, на какой странице каждый пользователь находится в данный момент и после входа в систему, удаляя пользователей, которые были неактивны в течение X минут, а затем подсчитываем количество пользователей в сети, перезаписывая наибольшее количество в сети, если оно выше.

Как мы можем изменить это, чтобы отслеживать количество пользователей в сети за определенный период времени, чтобы мы могли взглянуть на линейный график количества пользователей в сети.Я предполагаю, что нам понадобится cron для запуска каждые 1/2/5/10/20/30/60 минут, чтобы отслеживать номер онлайн?Тогда как бы хранить эти данные, таблица станет очень большой.Я думаю, что подобные Statcounter / Analytics могли бы лучше хранить эти данные.

Любые указатели будут оценены.

Ответы [ 3 ]

1 голос
/ 12 ноября 2010

Нет возможности хранить его в меньшем пространстве.Если у вас есть длительный период времени, у вас есть определенный объем данных.Это зависит от количества входов в систему и продолжительности интервалов, от того, лучше ли вы храните входы в систему или выборки количества пользователей.

Просто сохраните его с самой высокой частотой выборки, которую вам нужно, легко сгруппировать, например, по часу:

SELECT YEAR(sample_datetime),
       MONTH(sample_datetime),
       DAY(sample_datetime),
       HOUR(sample_datetime),
       AVG(user_count)
FROM stats
GROUP BY 1,2,3,4
0 голосов
/ 12 ноября 2010

Как вы уже упоминали, вам придется хранить пары время / значение где-то, возможно, в таблице базы данных. Все, что вам нужно, это дата / время и значение онлайн-пользователей (таблица с 2 столбцами).

Количество точек данных будет зависеть от того, как часто вы будете запрашивать счетчик. Как правило, я не думаю, что будет полезно проводить опрос чаще, чем ваш порог неактивности - если вы считаете пользователя неактивным через 10 минут, я бы не опрашивал счетчик чаще, чем каждые 10 минут.

Хотя объем данных не должен быть проблемой для большинства баз данных, вас может заинтересовать Round Robin Database или, по крайней мере, его концепция. Идея состоит в том, чтобы иметь очень подробный счетчик (1 точка данных каждые 10 минут) за последнюю неделю, менее подробный счетчик (каждые 4 часа) за последний месяц и еще менее подробный счетчик (каждый день) за последний год , и так далее. При настройке таким образом у вас есть постоянное количество точек данных в любой момент.

0 голосов
/ 12 ноября 2010

У нас есть таблица, в которой хранятся логины, поэтому у нас есть столбец user_id и столбец login_time.

Однако вы можете расширить это, чтобы охватить ваши сеансы и хранить login_time и logoff_time когда сессия заканчивается.Таким образом, вы можете посчитать количество сеансов в промежутке времени с помощью простого запроса SQL, например:

SELECT COUNT(*) AS count
FROM sessions
WHERE login_time <= '$yourTime'
AND logoff_time >= '$yourTime'

Взгляните на http://www.php.net/manual/en/session.customhandler.php на пользовательских обработчиках сеансов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...