ClickHouse: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Содержимое удалено Содержимое добавлено
Новая статья про open-source СУБД ClickHouse
(нет различий)

Версия от 09:53, 20 октября 2016

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

ClickHouse был разработан в Яндексе для решения задач Яндекс.Метрики - второй по величине системы web-аналитики в мире[1][2][3][4]. ClickHouse позволяет выполнять аналитические запросы по обновляемым данным в режиме реального времени. Система линейно масштабируемая и способна работать с триллионами записей и петабайтами данных[5].

В июне 2015-го года был выложен в open-source под лицензией Apache 2.0[6].

ClickHouse используется в ряде проектов внутри Яндекса, например, в open-source проекте Яндекс.Танк для хранения данных о телеметрии[6], Яндекс.Маркете для мониторинга здоровья сервиса[7] и т.д. Кроме того, ClickHouse применяется и во внешних проектах, например, для анализа метаданных о событиях в LHCb эксперименте в CERN[8] (порядка миллиарда событий и 1000 параметров для каждого события) и как хранилище в проекте Тинькофф Банка[9].

История

Изначально в Яндекс.Метрике использовался классический подход: исходные данные хранились в агрегированном виде[10]. С одной стороны, такой подход позволяет уменьшить размер хранимых данных. Однако, он имеет ряд ограничений и недостатков:

  • нужно заранее зафиксировать список доступных для пользователя отчетов и нет возможности построить произвольный отчет;
  • в результате агрегации объём данных может не уменьшиться, а вырасти: это происходит при группировке по большому количеству ключей или по ключам высокой кардинальности (таким как URL);
  • сложно поддерживать логическую целостность при хранении большого количества разных агрегаций.

Альтернативный подход состоит в том, чтобы хранить неагрегированные данные. Работа с сырыми неагрегированными данными требует от системы высокой эффективности, поскольку все вычисления нужно делать в момент запроса пользователя. Для этого нужна столбцовая СУБД, которая может работать с аналитическими данными на масштабах Рунета и имеет не запредельную стоимость. Поскольку на тот момент таких решений на рынке не было, то в Яндексе начали разрабатывать свою СУБД.

Первый прототип ClickHouse появился в 2009 году[5]. К концу 2014 года была запущена новая версия Метрика 2.0. Новый интерфейс позволяет пользователю строить произвольные отчеты и работает на базе технологии ClickHouse.

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

Основные отличительные характеристики ClickHouse[11]:

  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[12], NodeJS[13], Perl[14], Ruby[15] и R[16].
  10. Подробная документация.

Однако, у базы данных ClickHouse есть и ряд особенностей, которые могут считаться недостатками:

  • нет поддержки транзакций;
  • результат выполнения запроса в случае агрегации должен помещаться в оперативную память на одном сервере;
  • нет полноценной поддержки операций UPDATE и DELETE (есть возможность удалить PARTITION).

Ниша ClickHouse

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

  • в системе несколько слабо связанных таблиц с большим количеством параметров/столбцов (порядка сотен);
  • запросы могут использовать большое количество строк, но только небольшое подмножество столбцов;
  • в основном, запросы на чтение и достаточно редкие (обычно не более 100 rps на сервер);
  • при выполнении простых запросов, допустимы задержки в районе 50 мс;
  • значения в столбцах достаточно мелкие - числа и небольшие строки (пример - 60 байт на URL);
  • требуется высокая пропускная способность при обработке одного запроса (до миллиардов строк в секунду на один сервер);
  • результат выполнения запроса существенно меньше исходных данных - то есть, данные фильтруются или агрегируются;
  • сравнительно простой сценарий обновления данных, обычно только добавление данных пачками; нет сложных транзакций.

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

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

Benchmark

Согласно внутреннему benchmark[17] время выполнения OLAP запросов в Hive (СУБД на основе технологии Hadoop) и MySQL (типичная реляционная база данных) превышает latency в ClickHouse более чем в 100 раз.

Примечания

  1. Usage Statistics and Market Share of Traffic Analysis Tools for Websites, October 2016. w3techs.com. Дата обращения: 20 октября 2016.
  2. Datanyze. Analytics Market Share Report | Competitor Analysis | Google Analytics, Google Universal Analytics, Yandex Metrica (амер. англ.). Datanyze. Дата обращения: 20 октября 2016.
  3. Wappalyzer. Analytics. wappalyzer.com (30 декабря 2011). Дата обращения: 20 октября 2016.
  4. Analytics - SEOMON.com. seomon.com. Дата обращения: 20 октября 2016.
  5. 1 2 ClickHouse: High-Performance Distributed DBMS for Analytics | Percona Live Amsterdam - Open Source Database Conference 2016. www.percona.com. Дата обращения: 20 октября 2016.
  6. 1 2 "Яндекс открывает ClickHouse". Дата обращения: 20 октября 2016.
  7. Здоровье Маркета: как мы превращаем логи в графики, Дмитрий Андреев (Яндекс) — События Яндекса. events.yandex.ru. Дата обращения: 20 октября 2016.
  8. "Yandex — Yandex Launches Search Tool for LHC Events at CERN". Yandex. Дата обращения: 20 октября 2016.
  9. "Сравнение аналитических in-memory баз данных". Дата обращения: 20 октября 2016.
  10. "Эволюция структур данных в Яндекс.Метрике". Дата обращения: 20 октября 2016.
  11. 1 2 ClickHouse — руководство. clickhouse.yandex. Дата обращения: 20 октября 2016.
  12. smi2/phpClickHouse. GitHub. Дата обращения: 20 октября 2016.
  13. apla/node-clickhouse. GitHub. Дата обращения: 20 октября 2016.
  14. elcamlost/perl-DBD-ClickHouse. GitHub. Дата обращения: 20 октября 2016.
  15. archan937/clickhouse. GitHub. Дата обращения: 20 октября 2016.
  16. hannesmuehleisen/clickhouse-r. GitHub. Дата обращения: 20 октября 2016.
  17. Performance comparison of analytical DBMS. clickhouse.yandex. Дата обращения: 20 октября 2016.

Ссылки