ClickHouse: различия между версиями
Miptgirl (обсуждение | вклад) Новая статья про 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]:
- Действительно столбцовая СУБД. Рядом с данными не хранятся другие величины, например, в ClickHouse поддерживаются значения постоянной длины, чтобы не хранить рядом размер типа.
- Линейная масштабируемость. Система позволяет увеличивать кластер добавлением серверов.
- Отказоустойчивость. Система представляет собой кластер шардов, где каждый шард - это группа реплик. Используется асинхронная multimaster репликация: после записи на любую доступную реплику, данные распространяются на все остальные реплики. Для координации работы реплик используется ZooKeeper (ZooKeeper не участвует в процессе обработки и выполнения запроса).
- Способность работать с большими данными.
- Поддержка SQL. ClickHouse поддерживает диалект SQL c расширениями: массивы и вложенные структуры данных, вероятностные структуры, функция по работе с URI, возможность подключить внешнее key-value хранилище и т.д.
- Высокая эффективность работы:
- векторные вычисления;
- данные не только хранятся по столбцам, но и обрабатываются по векторам (кусочкам столбцов), за счёт чего достигается высокая эффективность по CPU;
- наличие функциональности для семплирования и приблизительных вычислений;
- параллельная и распределенная обработка запросов (в том числе JOIN'ов).
- Сжатие данных.
- СУБД оптимизирована для работы на HDD-дисках. Можно обрабатывать данные, которые не помещаются в оперативную память.
- Разнообразные интерфейсы. Для работы с базой данных можно использовать консольный клиент, HTTP API и ряд wrapper'ов на Python, PHP[12], NodeJS[13], Perl[14], Ruby[15] и R[16].
- Подробная документация.
Однако, у базы данных 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 раз.
Примечания
- ↑ Usage Statistics and Market Share of Traffic Analysis Tools for Websites, October 2016 . w3techs.com. Дата обращения: 20 октября 2016.
- ↑ Datanyze. Analytics Market Share Report | Competitor Analysis | Google Analytics, Google Universal Analytics, Yandex Metrica (амер. англ.). Datanyze. Дата обращения: 20 октября 2016.
- ↑ Wappalyzer. Analytics . wappalyzer.com (30 декабря 2011). Дата обращения: 20 октября 2016.
- ↑ Analytics - SEOMON.com . seomon.com. Дата обращения: 20 октября 2016.
- ↑ 1 2 ClickHouse: High-Performance Distributed DBMS for Analytics | Percona Live Amsterdam - Open Source Database Conference 2016 . www.percona.com. Дата обращения: 20 октября 2016.
- ↑ 1 2 "Яндекс открывает ClickHouse". Дата обращения: 20 октября 2016.
- ↑ Здоровье Маркета: как мы превращаем логи в графики, Дмитрий Андреев (Яндекс) — События Яндекса . events.yandex.ru. Дата обращения: 20 октября 2016.
- ↑ "Yandex — Yandex Launches Search Tool for LHC Events at CERN". Yandex. Дата обращения: 20 октября 2016.
- ↑ "Сравнение аналитических in-memory баз данных". Дата обращения: 20 октября 2016.
- ↑ "Эволюция структур данных в Яндекс.Метрике". Дата обращения: 20 октября 2016.
- ↑ 1 2 ClickHouse — руководство . clickhouse.yandex. Дата обращения: 20 октября 2016.
- ↑ smi2/phpClickHouse . GitHub. Дата обращения: 20 октября 2016.
- ↑ apla/node-clickhouse . GitHub. Дата обращения: 20 октября 2016.
- ↑ elcamlost/perl-DBD-ClickHouse . GitHub. Дата обращения: 20 октября 2016.
- ↑ archan937/clickhouse . GitHub. Дата обращения: 20 октября 2016.
- ↑ hannesmuehleisen/clickhouse-r . GitHub. Дата обращения: 20 октября 2016.
- ↑ Performance comparison of analytical DBMS . clickhouse.yandex. Дата обращения: 20 октября 2016.
Ссылки