Skip to content

Latest commit

 

History

History
30 lines (23 loc) · 2.44 KB

README.md

File metadata and controls

30 lines (23 loc) · 2.44 KB

Задача

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

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

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

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

Описание

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


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

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