### Описание Игрушечная реализация функционала для работы с БД [ClickHouse](https://github.com/yandex/ClickHouse) для хранения событий, привязанных к компании. ### Зависимости - \>PHP 7.1 - Composer - MongoDB - MongoDB расширение из PECL - ClickHouse - gnuplot > В своей конфигурации я использую MongoDB 3.6.2, > MongoDB extension 1.3.4 > и ClickHouse 1.1.54337 ### Сценарий работы 1. Обновление зависимостей **`composer up`** 2. Первым шагом необходимо сгенерировать в MongoDB 1,5 миллиона компаний со случайными именами: **`bin/kitchen.php fill-companies --verbose`** > Другое количество можно указать при помощи опции --count=[COUNT] 3. Далее для этих компаний необходимо создать набор случайных событий за текущий месяц: **`bin/kitchen.php generate-random-events --verbose`** > На моём настольном компьютере (i5-6400@2.7GHz/HDD 7200RPM) > вставка осуществляется со скоростью ~35 тысяч событий в секунду. > При помощи опции --count также можно указать количество событий, > генерируемых для каждой компании. По-умолчанию это 256 4. Получить сводку о количествах событий за текущий месяц для конкретной компании: **`bin/kitchen.php events-report --company-id=5a71d90f32cc8e5d6a09f8bb`** ![Result](https://gl.avolver.ru/avolver/company-events-kitchen/raw/master/events-kitchen.png) > Месяц и год можно изменить опциями --month и --year соответственно 5. И наконец — генерируем простенький, но график: **`bin/kitchen.php events-report --company-id=5a71d90f32cc8e5d6a09f8bb --format=graph > plot.png`** ![Plot](https://gl.avolver.ru/avolver/company-events-kitchen/raw/master/plot.png) > Рендер графика реализован исключительно в ознакомительных целях и не претендует быть наглядным ### Пояснения - Доступные типы событий хранятся в перечислении `CompanyEvent` - Метод для постановки события в очередь `EventsRepository::addEventToQueue(...)` - Метод для вставки очереди `EventsRepository::insertEventsFromQueue()` - В текущей реализации вставка событий происходит пакетно, по 10 тысяч штук в очереди; - Перед вставкой события сортируются по дате, так как в этом случае ClickHouse проще их вставить; - Рекомендуется (в документации CH) также упаковывать в одну очередь только события из одного месяца;