Игрушечная реализация функционала для работы с БД ClickHouse для хранения событий, привязанных к компании.

avolver f563423af2 Обновление путей к картинкам před 7 roky
bin 7accaff116 Часть черновой реализации před 8 roky
src edb3b5960f Добавлен график před 8 roky
.gitignore 7accaff116 Часть черновой реализации před 8 roky
README.md f563423af2 Обновление путей к картинкам před 7 roky
composer.json edb3b5960f Добавлен график před 8 roky
composer.lock edb3b5960f Добавлен график před 8 roky
events-kitchen.png 7ec9b9fc2e Добавлен файл "ПрочитайМеня" před 8 roky
plot.png edb3b5960f Добавлен график před 8 roky

README.md

Описание

Игрушечная реализация функционала для работы с БД 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

  1. Первым шагом необходимо сгенерировать в MongoDB 1,5 миллиона компаний со случайными именами:

bin/kitchen.php fill-companies --verbose

Другое количество можно указать при помощи опции --count=[COUNT]

  1. Далее для этих компаний необходимо создать набор случайных событий за текущий месяц:

bin/kitchen.php generate-random-events --verbose

На моём настольном компьютере (i5-6400@2.7GHz/HDD 7200RPM) вставка осуществляется со скоростью ~35 тысяч событий в секунду.

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

  1. Получить сводку о количествах событий за текущий месяц для конкретной компании:

bin/kitchen.php events-report --company-id=5a71d90f32cc8e5d6a09f8bb

Result

Месяц и год можно изменить опциями --month и --year соответственно

  1. И наконец — генерируем простенький, но график:

bin/kitchen.php events-report --company-id=5a71d90f32cc8e5d6a09f8bb --format=graph > plot.png

Plot

Рендер графика реализован исключительно в ознакомительных целях и не претендует быть наглядным

Пояснения

  • Доступные типы событий хранятся в перечислении CompanyEvent
  • Метод для постановки события в очередь EventsRepository::addEventToQueue(...)
  • Метод для вставки очереди EventsRepository::insertEventsFromQueue()
  • В текущей реализации вставка событий происходит пакетно, по 10 тысяч штук в очереди;
  • Перед вставкой события сортируются по дате, так как в этом случае ClickHouse проще их вставить;
  • Рекомендуется (в документации CH) также упаковывать в одну очередь только события из одного месяца;