Skip to content

ticktick/max-surfers-online

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Задача

Имеется модуль, который логирует факт посещения сёрфером сайта (несколько миллионов посещений в день). Лог ведётся в таблицу БД. Структура таблицы: (datetime (присутствует индекс), status) Пишется дата+время и статус (1 — пришли на сайт, 2 — ушли). Реализовать возможность определения максимального количество сёрферов, одновременно находящихся на сайте за определённый промежуток времени (максимальный диапазон - один день, минимальный - одна секунда). Для удобства можно использовать любой фреймворк. Входные данные - две даты (границы диапазона), выходные - число. Ограничения: нельзя использовать триггеры и хранимые процедуры.

Установка и запуск

Необходимо проинсталлировать библиотеки (в директории www) с помощью composer.

После этого запустить можно в докере: docker-compose up --build

Описание

Исходя из необходимости обрабатывать потенциально большое количество данных было принято решение агрегировать данные кортежами по секундам - (second, max, end), где max - максимальное кол-во серферов в интервале, end - число серферов на конец интервала. Агрегация производится настраиваемым числом воркеров для распараллеливания подсчета (мы должны успевать обсчитывать данные по одной секунде не менее, чем за секунду, иначе кеш начнет отставать) Данные, собранные воркерами затем собираются в окончательный кеш отдельным воркером.


Логика модуля в /www/app

Схема БД в /images/postgres/init.sql

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages