Небольшое тестовое задание для собеседования.
В описании задачи не сказано какие ошибки насколько критичны. Данная реализация в угоду скорости заточена под конкретный вид поступающих данных. Код полагается на то, что формат данных обговорен заранее - речь про парсинг строк из "сломаного" JSON. В данной реализации ошибки лишь логируются в консоль.
В директории config
есть пример конфигурационного файла. Но его создавать необязательно. В коде предусмотрены дефолт-значения. Более того последующие команды Makefile
полагаются именно на дефолты (для упрощения).
Есть несколько команд Makefile
.
Все команды проверялись на MacOS.
Для начала можно потестировать производительность с помощью написанных Benchmark
:
- make bench - запустит бенчи на самые важные элементы, а именно:
Parse
- парсинг из строки в структуру (входящие строковые JSON с разделителем)Process
- полный процессинг одного запроса (то есть парсинг + передача на сохранение)
- make test - тест только важных мест;
Если docker
не установлен, можно запустить код без базы данных:
- make run_fake - эта команда запустит приложение с fake-репозиторием. будет только логировать количество сохраненных событий
Для запуска приложения команды подразумевают, что локально установлен docker
:
- make dep - разберется с зависимостями
- make docker_prepare - стянет image'ы, создаст контейнер с нестандартными для CH портами (9001 / 8124) и прогонит в нем миграции;
- имя базы данных - interview;
- имя таблицы - events;
- make docker_start, make docker_stop - для старта и остановки контейнера
- make run - запустит приложение
- make request - сделает запрос на сервер с помощью
curl
- make events_count - выведет количество записей в таблице
events
Для чистки докера:
- make docker_cleanup - удалит созданный контейнер
- make docker_rmi - удалит скачанные image'ы
Если есть свой хост с clickhouse сервером - миграции хранятся в storage/clickhouse/migrations
;