Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
 Отслеживание кто из пользователей онлайн  [new]
pr0n1x
Member

Откуда: Киев
Сообщений: 45
Здравствуйте.

Делаю портал на фреймворке CakePHP 3 + MySQL. Требуется сделать систему отслеживания кто из пользователей на данный момент находится онлайн.

Принцип работы системы понятен, нужно при каждом заходе на любую из страниц обновлять в таблице users поле last_activity_date и записывать дату последнего обращения к скрипту.

Но если пользователей будет много, боюсь что слишком много запросов будет к таблице users на обновление даты.

Хочу сделать следующее, создать таблицу users_online типа memory с двумя полями user_id и last_activity_date и при каждом обращении к скрипту делать insert или update таблицы users_online, так как операции с таблицей которая находится в оперативной памяти будет в разы быстрее.

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

Выбирать всех пользователей из таблицы users_online у которых дата последней активности больше чем 5 минут. Если такие пользователи есть, то значит они находятся в оффлайне, следовательно я беру дату их последней активности в таблице users_online и обновляю их дату последней активности в таблице users и удаляю их из таблицы users_online.

Следовательно когда мне где-то на сайте нужно будет показать находится ли пользователе онлайн или оффлайн я буду делать следующее:

Выбирать всех нужных пользователей из таблицы users делаю left join с таблицей users_online, если пользователь есть в таблице users_online тогда выводим на сайте, что он находится в онлайне, если записи в таблице users_online нет, тогда берем дату последней активности в таблице users и показываем, когда пользователь был последний раз на сайте.

Еще нужно сделать дополнительный скрипт, который через ajax каждые 5 минут будет вызываться на любой странице сайта. Это нужно для того, чтобы если пользователь находится на одной странице большее 5ти минут то обновлять его дату последней активности в таблице users_online.

В своей практике не разу не использовал таблице типа memory, по этому вопрос в слудеющем

1) Насколько целесообразно использовать в таком случае таблицу типа memory? Или можно с этим не заморачиваться и хранить дату последней активности в таблице users и все операции делать именно с этой таблицей.

2) Скрипт который будет вызываться через ajax каждые 5 минут, насколько целесообразно делать его на обычном php без использования фреймворка? Так как если я буду обращаться к обычному php то он сделает только то, что мне нужно, а если использовать фреймворк то он будет подгружать все классы которые ему нужны для работы.

Спасибо.
15 сен 17, 10:28    [20797961]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание кто из пользователей онлайн  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 4627
имхо, вам
с первым вопросом в форум мусуля
со вторым в форум пыхи

а какую задачу решаете этим - "какие пользователи онлайн"?
15 сен 17, 11:43    [20798268]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание кто из пользователей онлайн  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22602
pr0n1x
Но если пользователей будет много, боюсь что слишком много запросов будет к таблице users на обновление даты.

Много - это сколько? Может не стоит преждевременно усложнять решение?
15 сен 17, 12:25    [20798463]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание кто из пользователей онлайн  [new]
pr0n1x
Member

Откуда: Киев
Сообщений: 45
skyANA,

автор
Много - это сколько? Может не стоит преждевременно усложнять решение?


около 500 пользователей онлайн и каждый из них ходит по страницам сайта, это получается что каждый раз я должен апдейтить таблицу users
15 сен 17, 15:20    [20799179]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание кто из пользователей онлайн  [new]
registerers
Member

Откуда:
Сообщений: 47
TIMESTAMP обновляется при каждом обращении юзера к приложению. В конфиг вынесите таймаут, например 5 минут. Это и будет критерием "онлайн"
15 сен 17, 15:32    [20799217]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание кто из пользователей онлайн  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22602
pr0n1x
skyANA,

автор
Много - это сколько? Может не стоит преждевременно усложнять решение?


около 500 пользователей онлайн и каждый из них ходит по страницам сайта, это получается что каждый раз я должен апдейтить таблицу users

Это не много, это мало.
15 сен 17, 16:21    [20799401]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить