Управляемые базы данных. ClickHouse
В 2009 году Яндекс для мгновенного построения отчетов по неагрегированным логам в режиме реального времени разработал первый прототип своей аналитической системы управления базами данных — ClickHouse. Сейчас эта СУБД может применяться в различных сферах для задач, где требуется огромная скорость обработки постоянно поступающей информации.
Зачем понадобились колоночные (столбцовые) системы управления базами данных
Универсальные СУБД при достаточно большой нагрузке либо становятся очень медленными, либо начинают потреблять большое количество серверных мощностей. Например, классическая проблема любой традиционной реляционной базы данных, которая хранит все в строках, — это очень медленная работа сложных аналитических запросов, если количество записей достигает нескольких миллиардов строк. При создании отчетов таким СУБД приходится анализировать множество лишней связанной информации. На скорость построения выборок из такого количества записей не влияет даже оптимизация — правильно настроенные ключи и индексы.
Чтобы ускорить построение отчетов, были придуманы колоночные СУБД, которые, как можно догадаться, изначально хранят данные в колонках. Если один столбец содержит единственный набор значений, то становится гораздо проще строить отчеты по каким-либо показателям. Колоночные СУБД лучше всего подходят для OLAP сценариев работы — обработки аналитических запросов в режиме онлайн. Для таких задач характерны следующие факторы:
- подавляющее большинство запросов идет на чтение;
- данные добавляются и обновляются достаточно большими пачками (> 1000 строк), а не по одной строке, или не добавляются и не обновляются вообще;
- данные добавляются в базу данных, но не изменяются;
- при чтении используется достаточно большое количество строк из базы данных, но только небольшое подмножество столбцов.
Если вы попытаетесь использовать для аналитики классические СУБД, то получите очень низкую производительность по сравнению с OLAP-СУБД. Это проще продемонстрировать визуально:
ClickHouse
Колоночная СУБД ClickHouse разрабатывалась, чтобы можно было в интерактивном режиме строить отчеты по неагрегированным логам пользовательских действий. Но этим возможности системы не ограничиваются. Со временем к ClickHouse была написана подробная документация, и базу данных стали активно использовать в других продуктах Яндекса — Директе, Маркете, Почте, ADFOX, Вебмастере, в мониторинге и бизнес-аналитике. Например, сервис нагрузочного тестирования Яндекс.Танк использует ClickHouse для хранения данных телеметрии. СУБД позволяла решать задачи, для которых раньше не было подходящих инструментов, или же с ней получалось это делать намного эффективнее, чем с другими системами.
Вот лишь некоторые архитектурные особенности ClickHouse:
- столбцовое хранение данных — данные считываются только из нужных колонок, и однотипная информация эффективно сжимается;
- поддержка приближенных вычислений на части выборки — снижается число обращений к жесткому диску, что еще больше повышает скорость обработки данных;
- физическая сортировка данных по первичному ключу — можно быстро получить конкретные значения или диапазоны;
- векторные вычисления по кусочкам столбцов — снижаются издержки на диспетчеризацию, эффективно используется CPU;
- распараллеливание операций как в пределах одного сервера на несколько процессорных ядер, так и в рамках распределенных вычислений на кластере за счет механизма шардирования;
- линейная масштабируемость — есть возможность построить кластер очень большого размера;
- работа с жесткими дисками — ClickHouse достаточно эффективно работает, когда данные не попадают в кеш памяти целиком. Дополнительно это снижает стоимость эксплуатации системы, так как жесткие диски дешевле RAM;
- отказоустойчивость — система представляет собой кластер шардов, где каждый шард — это группа реплик.
ClickHouse поддерживает клиенты для подключения к базе данных: консольный клиент, HTTP API, ряд wrapper’ов на Python, PHP, Node.js, Perl, Ruby, R и многие другие. Также для ClickHouse есть JDBC- и Golang-драйверы.
Где можно применять ClickHouse
За рамки внутренних проектов ClickHouse вышла в 2013 году, когда ее начали применять для анализа метаданных о событиях эксперимента LHCb в CERN. Базу данных могли бы использовать более широко, но в то время мешал закрытый статус. Однако уже в июне 2016 года исходный код ClickHouse был выложен в open source под лицензией Apache 2.0. Это позволило взять ее на вооружение IT-департаментам множества отечественных и зарубежных компаний. В их числе Cloudflare, Bloomberg, ВКонтакте, «Тинькофф банк», Avito, онлайн-кинотеатр ivi.ru, интернет-порталы Mail.ru и Rambler. Например, социальная сеть VK использует нашу СУБД для хранения и чтения отладочных логов. Аналогично делают и другие компании, сгружая в базы данных логи микросервисов и приложений за большой период, а затем быстро возвращаясь к ним для анализа.
ClickHouse в 2020 году — это полноценная СУБД, которая обладает очень широкими возможностями. Создавайте таблицы и базы данных в runtime, загружайте из разных источников данные, анализируйте их и выполняйте запросы без переконфигурирования и перезапуска сервера. ClickHouse позволяет реализовать быстрый доступ к корпоративным хранилищам данных, поддерживает декларативный язык запросов на основе SQL, во многих случаях совпадающий с SQL стандартом. СУБД можно интегрировать с такими Big Data системами, как Apache Kafka и HDFS, а также с MySQL и прочими внешними источниками данных через ODBC или JDBC.
Возможности колоночных СУБД и преимущества конкретно ClickHouse позволяют очень эффективно использовать нашу разработку в самых разных сферах. Это могут быть:
- аналитика веб-проектов и мобильных приложений;
- рекламные сети и real-time bidding (торги в реальном времени);
- телекоммуникации;
- электронная коммерция и финансы;
- информационная безопасность;
- бизнес-аналитика;
- онлайн-игры;
- интернет вещей.
Но по-прежнему главное преимущество ClickHouse — невероятная скорость. Она позволяет решать очень важную общую задачу бизнеса в области аналитики поведения клиентов — очень быстро и легко генерировать аналитические отчеты по большим данным в режиме реального времени. Это актуально для ритейла, телекома, любой интернет-инфраструктуры, хранения данных и быстрого к ним доступа с устройств интернета вещей и т. д.
ClickHouse позволяет отслеживать бизнес-метрики для анализа поведения пользователей на сайте магазина или в онлайн-играх. Компании могут даже собирать и создавать витрины данных для своих клиентов, предоставляя им безопасный доступ только к той информации, которой можно делиться.
Что дальше?
Мир накапливает очень много больших неструктурированных данных, к которым нужно иметь доступ в режиме реального времени. И для этого необходимо развивать и совершенствовать такие системы управления базами данных, как ClickHouse.
Следующим шагом для бизнеса должен стать переход в облачные решения, чтобы иметь возможность быстро визуализировать данные без долгой покупки и настройки железа, мгновенно настраивать дашборды под свои задачи, а также в реальном времени анализировать события и бизнес-процессы.
Для этого уже есть сервис Yandex Managed Service for ClickHouse, который помогает разворачивать и поддерживать в инфраструктуре Yandex.Cloud кластеры баз данных на основе ClickHouse. Вы получаете все описанные преимущества колоночных СУБД, и при этом вам не нужно покупать и настраивать железо, разбираться со сложностями в обслуживании баз данных и решать проблемы с обновлением. Кроме того, Yandex Managed Service for ClickHouse значительно повышает безопасность работы и позволяет создавать хосты кластера в разных зонах доступности.
Создайте свой первый кластер ClickHouse
console.cloud.yandex.ru/link/managed-clickhouse/