MrLinch
@MrLinch
Just like coding...

Как организовать отложенную обработку статистики?

Здравствуйте.

Есть простая система учета статистики кликов по ссылкам. Фронтенд после того как осуществляет редирект, отправляет RPUSH'ом данные о клике (LinkID, сессию, timestamp), в ключ с именем "clicks_queue". Каждые 5 сек, просыпается воркер который командой LRANGE clicks_queue 0 -1 извлекает все клики из очереди и записывает в БД изминения сгруппированные по ссылкам. При маленьких нагрузках все ок, но стоит нагрузке возрасти как наблюдается расхождение по логам и статистике. Подозреваю что пока воркер читает данные из очереди, фронтенд добавляет еще клики. Но когда воркер извлек все элементы, он очищает ltrim'om очередь и те данные что запичались так же удаляются. Что я делаю не так, и как лучше организовать отложенную обработку статистики?

Заранее, спасибо.
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
посмотрите в сторону сервера очередей,
не знаю как устроен RPUSH, но в Питоне подобное опирается на zeromq или gearman на худой конец
Ответ написан
Комментировать
mgyk
@mgyk
Вытаскивайте данные и очищайте список внутри транзакции:

redis.io/topics/transactions
MULTI
LRANGE clicks_queue 0 -1
DEL clicks_queue
EXEC
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы