|
@@ -0,0 +1,58 @@
|
|
|
|
|
+### Описание
|
|
|
|
|
+
|
|
|
|
|
+Игрушечная реализация функционала для работы с БД [ClickHouse](https://github.com/yandex/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`**
|
|
|
|
|
+
|
|
|
|
|
+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 generate-random-events --verbose`**
|
|
|
|
|
+
|
|
|
|
|
+ 
|
|
|
|
|
+
|
|
|
|
|
+ > Месяц и год можно изменить опциями --month и --year соответственно
|
|
|
|
|
+
|
|
|
|
|
+### Пояснения
|
|
|
|
|
+
|
|
|
|
|
+ - Доступные типы событий хранятся в перечислении `CompanyEvent`
|
|
|
|
|
+ - Метод для постановки события в очередь `EventsRepository::addEventToQueue(...)`
|
|
|
|
|
+ - Метод для вставки очереди `EventsRepository::insertEventsFromQueue()`
|
|
|
|
|
+ - В текущей реализации вставка событий происходит пакетно, по 10 тысяч штук в очереди;
|
|
|
|
|
+ - Перед вставкой события сортируются по дате,
|
|
|
|
|
+ так как в этом случае ClickHouse проще их вставить;
|
|
|
|
|
+ - Рекомендуется (в документации CH) также упаковывать в одну очередь только события из одного месяца;
|