ClickHouse

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:39, 15 декабря 2017.
ClickHouse
Clickhouse.png
Разработчики: Яндекс
Выпущена: 23 сентября 1997
Операционная система: Linux
Локализация: English
Тип ПО: СУБД
Лицензия: Open-source
Веб-сайт clickhouse.yandex

ClickHouse — это столбцовая СУБД для OLAP (online обработки аналитических запросов). [Источник 1]

История создания

Изначально ClickHouse разрабатывалась исключительно для задач Яндекс.Метрики — чтобы строить отчёты в интерактивном режиме по неагрегированным логам пользовательских действий. В связи с тем, что система является полноценной СУБД и обладает весьма широкой функциональностью, уже в начале использования в 2012 году, была написана подробная документация. Это отличает ClickHouse от многих типичных внутренних разработок — специализированных и встраиваемых структур данных для решения конкретных задач, таких как, например, Metrage и OLAPServer. [Источник 2]

Развитая функциональность и наличие детальной документации привели к тому, что ClickHouse постепенно распространился по многим отделам Яндекса. Неожиданно оказалось, что система может быть установлена по инструкции и работает «из коробки», то есть не требует привлечения разработчиков. ClickHouse стал использоваться в Директе, Маркете, Почте, AdFox, Вебмастере, в мониторингах и в бизнес-аналитике. ClickHouse позволял либо решать задачи, для которых раньше не было подходящих инструментов, либо решать задачи на порядки эффективнее, чем другие системы.

Постепенно возник спрос на использование ClickHouse не только во внутренних продуктах Яндекса. Например, в 2013 году, ClickHouse применялся для анализа метаданных о событиях эксперимента LHCb в CERN. Система могла бы использоваться более широко, но в то время этому мешал закрытый статус. Другой пример: open-source технология Яндекс.Танк внутри Яндекса использует ClickHouse для хранения данных телеметрии, тогда как для внешних пользователей в качестве базы данных был доступен только MySQL, который плохо подходит для данной задачи.

По мере расширения пользовательской базы, возникла необходимость тратить на разработку чуть больше усилий, хоть и не очень много по сравнению с трудозатратами на решение задач Метрики. Однако было получено повышение качества продукта, особенно в плане удобства пользования.

Расширение пользовательской базы позволяет рассматривать примеры использования, которые без этого едва ли пришли бы в голову. Также это позволяет быстрее находить ошибки и неудобства, которые имеют значение в том числе и для основного применения ClickHouse — в Метрике. Без сомнения, всё это повышает качество продукта. Поэтому было принято решение сделать ClickHouse открытым сегодня.

Характеристики

Основные характеристики базы данных ClickHouse:

  1. Действительно столбцовая СУБД. Рядом с данными не хранятся другие величины, например, в ClickHouse поддерживаются значения постоянной длины, чтобы не хранить рядом размер типа.
  2. Линейная масштабируемость. Система позволяет увеличивать кластер добавлением серверов.
  3. Отказоустойчивость. Система представляет собой кластер шардов, где каждый шард — это группа реплик. Используется асинхронная multimaster репликация: после записи на любую доступную реплику, данные распространяются на все остальные реплики. Для координации работы реплик используется ZooKeeper (ZooKeeper не участвует в процессе обработки и выполнения запроса).
  4. Способность работать с большими данными (триллионы записей и петабайты данных).
  5. Поддержка SQL. ClickHouse поддерживает диалект SQL c расширениями: массивы и вложенные структуры данных, вероятностные структуры, функция по работе с URI, возможность подключить внешнее key-value хранилище и т. д.
  6. Высокая эффективность работы. Векторные вычисления; данные не только хранятся по столбцам, но и обрабатываются по векторам (кусочкам столбцов), за счёт чего достигается высокая эффективность по CPU; наличие функциональности для семплирования и приблизительных вычислений; параллельная и распределенная обработка запросов (в том числе JOIN'ов).
  7. Сжатие данных.
  8. СУБД оптимизирована для работы на HDD-дисках. Можно обрабатывать данные, которые не помещаются в оперативную память.
  9. Разнообразные клиенты для подключения к БД. Для работы с базой данных можно использовать консольный клиент, HTTP API и ряд wrapper’ов на Python, PHP, NodeJS, Perl, Ruby и R. Также для ClickHouse есть JDBC и Golang драйверы.
  10. Подробная документация.

Применение

ClickHouse разрабатывался для OLAP сценария работы:

  1. в системе несколько слабо связанных таблиц с большим количеством параметров/столбцов (порядка сотен);
  2. запросы могут использовать большое количество строк, но только небольшое подмножество столбцов;
  3. в основном, запросы на чтение и достаточно редкие (обычно не более 100 rps на сервер);
  4. при выполнении простых запросов, допустимы задержки в районе 50 мс;
  5. значения в столбцах достаточно мелкие — числа и небольшие строки (пример — 60 байт на URL);
  6. требуется высокая пропускная способность при обработке одного запроса (до миллиардов строк в секунду на один сервер);
  7. результат выполнения запроса существенно меньше исходных данных — то есть, данные фильтруются или агрегируются;
  8. сравнительно простой сценарий обновления данных, обычно только добавление данных пачками; нет сложных транзакций.

ClickHouse не подходит для транзакционных систем, OLTP задач и использования как хранилища типа «ключ-значение» или в качестве документоориентированной системы.

Один из типичных сценариев использования ClickHouse — это анализ серверных логов. После настройки регулярной поставки серверных access или других логов (рекомендуется записывать строки батчами более 1000 записей) можно с помощью SQL запросов анализировать инциденты и мониторить метрики сервиса, такие как число ошибок, время ответа и т. д.

Еще одно возможное применение ClickHouse — это внутреннее хранилище данных для аналитиков. В ClickHouse можно сложить данные из различных систем (например, Hadoop или просто логи) и строить по ним отчеты для бизнес-нужд.

Установка ClickHouse

Установка ClickHouse будет производиться на операционной системе Ubuntu 16.04 Xenial. На Ubuntu и Debian Linux вы можете установить ClickHouse из готовых пакетов. На других Linux-системах, можно собрать ClickHouse из исходников и установить его самостоятельно.

Пакет clickhouse-client содержит программу clickhouse-client — клиент ClickHouse для работы в интерактивном режиме. Пакет clickhouse-server-base содержит бинарный файл clickhouse-server, а clickhouse-server-common — конфигурационные файлы к серверу. Выполняем следующие команды:[Источник 3]

sudo apt-add-repository "deb http://repo.yandex.ru/clickhouse/trusty stable main"
sudo apt-get update
sudo apt-get install clickhouse-server-common clickhouse-client -y

Сервер не запускается самостоятельно при установке пакета и не перезапускается сам при обновлении. [Источник 4] Для запуска сервера, необходимо выполнить:

sudo service clickhouse-server start

Для работы в интерактивном режиме:

clickhouse-client

После выполненных команд окно имеет следующий вид:

Вид окна

Пример работы с ClickHouse

Для создания таблицы t с двумя столбцами b и a типа String и Int соответственно необходимо выполнить следующее:

CREATE TABLE t (b String, a UInt8) ENGINE = Memory
Создание таблицы

Для того чтобы создать в новой таблице записи необходимо воспользоваться командой INSERT. Проверим, что записи появились с помощью команды SELECT:

INSERT INTO t VALUES ('first', 2), ('second', 15), ('third', 8)
SELECT * FROM t

Результат на экране:

Добавление записей

Выведем на экран все b, значения а для которых больше 7:

SELECT b FROM t WHERE a>7
Работа с командой SELECT

Для удаления таблицы нужно воспользоваться командой DROP TABLE. Убедимся, что таблица отсутствует с помощью команды SELECT.

DROP TABLE t
SELECT * FROM t
Удаление таблицы

Источники

  1. ClickHouse [Электронный ресурс] — Дата обращения: 19.11.2017. Режим доступа: https://ru.wikipedia.org/wiki/ClickHouse
  2. Яндекс открывает ClickHouse [Электронный ресурс] — Дата обращения: 19.11.2017. Режим доступа: https://habrahabr.ru/company/yandex/blog/303282/
  3. ClickHouse [Электронный ресурс] — Дата обращения: 19.11.2017. Режим доступа: https://clickhouse.yandex
  4. ClickHouse. Руководство [Электронный ресурс] — Дата обращения: 19.11.2017. Режим доступа: http://clickhouse.readthedocs.io/en/latest/reference_ru.html