Каков шаблон для отслеживания текущих пользователей в движке приложений Google?

Каждый из моих пользователей опрашивает сервер каждые несколько секунд. Мне нужно держать список пользователей, опрошенных за последние 30 секунд, под рукой для задачи, которую я ставил в очередь для выполнения каждые несколько секунд.

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

Какие-нибудь рекомендации?

Спасибо.


person shino    schedule 23.06.2010    source источник
comment
Просто убедитесь, что вы поставили индекс на метку времени   -  person Romain Hippeau    schedule 23.06.2010


Ответы (2)


Я проверил скорость записи для небольших объектов примерно на 1/20 секунды каждая. Если вы основываете ключ объектов опроса на уникальном значении, связанном с пользователем, тогда вы можете получить доступ к объектам опроса по ключу при их обновлении, что является очень быстрым хешем вместо поиска.

Записи должны быть в порядке, если вам не нужно одновременно писать в сущности (что, похоже, вы не будете делать, поскольку у вас есть по одному для каждого пользователя). Просто убедитесь, что вы не помещаете объекты опроса в одну и ту же группу объектов, если вы это сделаете, запись в одну заморозит все остальные во время записи.

Вы можете запросить все объекты опроса, которые были обновлены за последние 30 секунд, это чтение и должно выполняться быстро.

person Chris Dutrow    schedule 23.06.2010
comment
Меня беспокоит последний запрос на создание моего списка текущих пользователей. Если у меня опрашивается 1000 пользователей, это означает, что мне нужно получить 1000 объектов. Или вы говорите, что запрос будет быстрым, если я назначу ключ каждому пользователю? Спасибо. - person shino; 24.06.2010
comment
Я думаю, что этот запрос действительно будет медленным. Возможно, вам даже придется разбить его на несколько разных запросов. Нужно ли сразу возвращать? Если вы запускаете задачу каждые несколько секунд, интересно, можете ли вы просто опросить пользователей, которые опрашивались с момента последнего запроса? Другой вариант - использовать около 50 объектов, каждая из которых содержит список недавно опрошенных пользователей. Вы можете использовать ключ пользователя для формирования хэша, который будет определять, какой объект обновлять при опросе. - person Chris Dutrow; 27.06.2010

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

person Nick Johnson    schedule 23.06.2010