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

Vladimir Tkachev 7ec9b9fc2e Добавлен файл "ПрочитайМеня" 8 éve
bin 7accaff116 Часть черновой реализации 8 éve
src 65f78583c2 Черновое приложение завершено 8 éve
.gitignore 7accaff116 Часть черновой реализации 8 éve
README.md 7ec9b9fc2e Добавлен файл "ПрочитайМеня" 8 éve
composer.json 7accaff116 Часть черновой реализации 8 éve
composer.lock 7accaff116 Часть черновой реализации 8 éve
events-kitchen.png 7ec9b9fc2e Добавлен файл "ПрочитайМеня" 8 éve

README.md

Описание

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

Зависимости

  • >PHP 7.1
  • MongoDB расширение из PECL
  • Composer
  • MongoDB
  • ClickHouse

В своей конфигурации я использую 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 generate-random-events --verbose

Result

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

Пояснения

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