Баннер мобильный (1) Пройти тест

ClickHouse — зачем нужна эта база данных и как она работает

А может быть, не база, а может, СУБД

Разбор

19 апреля 2024

Поделиться

Скопировано
ClickHouse — зачем нужна эта база данных и как она работает

Содержание

    ClickHouse — это система управления базами данных (СУБД) для онлайн-обработки аналитических запросов (OLAP). C ее помощью можно работать с огромными объемами информации: создавать базы данных, изменять их и удалять. Она также позволяет выполнять различные операции с данными: чтение, запись, обновление и удаление. И все это — в режиме реального времени. 

    Технически ClickHouse является и базой данных, и СУБД. Система позволяет не только управлять данными, но и создавать базы, в которых эти данные будут храниться и к которым аналитик будет обращаться.

    ClickHouse распространяется под лицензией Apache License 2.0, это одно из немногих открытых решений в области OLAP. Пользователи могут свободно использовать, изучать, модифицировать и распространять ClickHouse, что способствует развитию сообщества и созданию новых решений на основе этой технологии.

    Команда разработки ClickHouse
    Команда разработки ClickHouse. Источник

    ClickHouse — продукт компании «Яндекс». Команда разработчиков решила, что создаст самую быструю базу данных OLAP в мире. Цель была амбициозной потому, что ClickHouse изначально разрабатывался для обеспечения работы «Яндекс.Метрики» — второй крупнейшей в мире платформы для веб-аналитики. 

    Ключевое требование к ClickHouse — высочайшая скорость работы. В «Яндекс.Метрику» поступали миллиарды событий, которые должны были обрабатываться онлайн и превращаться в отчеты за миллисекунды. 

    В 2009 году ClickHouse запустили как экспериментальный проект, а в 2012 году СУБД впервые использовали в производстве. Постепенно ClickHouse начали внедрять и в других проектах «Яндекса» — в «Вертикальных сервисах», «Маркете», «Директе», «БК», «Бизнес-аналитике», «Мобильной разработке», AdFox, «Персональных сервисах».

    Логотип ClickHouse
    Логотип ClickHouse. Источник

    Долгое время ClickHouse оставалась внутренним проектом Яндекса, но через некоторое время команда поняла: разработкой нужно поделиться с миром. В 2016 году исходный код ClickHouse опубликовали, проект стал опенсорсным. 

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

    СУБД ClickHouse развивается достаточно быстро: в год выпускается более десяти стабильных релизов.

    Как ClickHouse хранит данные

    Самое важное, что нужно знать про ClickHouse, — это столбцовая (колоночная) база данных. 

    Строковые базы данных (также известные как текстовые базы данных) хранят данные в виде текстовых строк. Они используются для небольших нагрузок и простых приложений. Данные организованы в виде таблиц, где каждая строка представляет отдельную запись, а столбцы определяют различные атрибуты или поля. 

    Выглядит это так:

    строковая БД
    Пример строковой базы данных. Источник

    У нас есть некоторые события, и каждое из них записано в свою строку. Одна строка — одно событие. У событий есть атрибуты, которые записаны в названиях столбцов. 

    Когда идет, например, поиск значений по базе данных — он происходит построчно. 

    Строковая СУБД принцип работы
    Стандартная строковая СУБД. Источник

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

    Однако строковые базы данных имеют свои ограничения. Их производительность часто ниже, чем у более сложных реляционных или NoSQL-баз, особенно при работе с большими объемами данных. Также сложно обеспечить целостность информации и эффективный поиск без использования специализированных инструментов.

    В целом строки базы данных просты в использовании, но они не всегда подходят для масштабируемых или требовательных к производительности приложений.

    Примерами строко-ориентированных СУБД являются MySQL, PostgreSQL

    Другой способ структурирования СУБД — в виде столбцовой (она же колончатая) базы. 

    ClickHouse хранит данные именно так:

    столбцовая БД
    Пример столбцовой базы данных. Источник

    У нас есть все те же события, но теперь каждое из них записано в свой столбец. Один столбец — одно событие. У событий есть атрибуты, которые записаны в названиях строк. 

    Когда идет, например, поиск значений по базе данных — он происходит по столбцам. 

    Принцип работы столбцовой СУБД
    Столбцовая СУБД. Источник

    Основные преимущества столбцовых баз данных:

    • Эффективны при выполнении операций чтения и агрегации данных. Каждый столбец содержит данные одного типа, поэтому база данных может сжимать их эффективнее. Это уменьшает объем хранимой информации и ускоряет операции поиска и агрегации.
    • Хорошо масштабируются. Они обрабатывают только те данные, которые необходимы для выполнения запроса. В результате они обрабатывают огромные объемы данных более эффективно.
    • Уменьшает количество операций ввода-вывода и снижает нагрузку на систему. При выполнении запроса на чтение столбцовая база данных может обратиться только к тем столбцам, которые требуются для выполнения запроса, минуя неиспользуемые столбцы.

    Столбцовые базы данных менее эффективны при выполнении операций записи. При добавлении новых данных может потребоваться обновление нескольких столбцов, что снизит производительность.

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

    Примеры столбцовых СУБД: Vertica, ParAccel (Actian Matrix, Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise, Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid.

    Преимущества и недостатки ClickHouse

    Как у любого инструмента, у ClickHouse есть плюсы и минусы. К сильным сторонам этой СУБД можно отнести:

    • Высокую производительность. ClickHouse спроектирована для работы с огромными объемами данных на высокой скорости. Она может обрабатывать миллиарды строк за считаные секунды.
    • Эффективное использование ресурсов. Благодаря колоночной архитектуре ClickHouse эффективно сжимает и хранит данные, что позволяет экономить пространство на диске и использовать меньше оперативной памяти.
    • Масштабируемость. ClickHouse легко масштабируется горизонтально. Когда количество данных или нагрузка на базу данных растет, инструмент позволяет просто добавить новые серверы, чтобы увеличить производительность.
    • Поддержку SQL. ClickHouse предоставляет широкий спектр SQL-функций и операторов, что делает ее более доступной для разработчиков и аналитиков данных.
    • Высокую доступность. ClickHouse гарантирует, что данные всегда доступны, даже если произойдут сбои в работе серверов (узлов). СУБД достигает этого с помощью двух основных механизмов:
      • Репликация данных. ClickHouse создает копии данных на нескольких серверах. Эти копии называются репликами. Если один из серверов перестает работать, данные все равно остаются доступными благодаря копиям на других серверах.
    • Обнаружение отказов. ClickHouse постоянно проверяет работоспособность своих серверов. Если какой-то сервер перестает отвечать или работает нестабильно, система обнаруживает этот сбой и автоматически переключается на другие, исправные сервера. Это позволяет избежать простоев и сохранить доступность данных.
    • Благодаря этим механизмам, даже при возникновении проблем с одним или несколькими серверами ClickHouse продолжает обеспечивать доступ к данным. Это гарантирует непрерывную работу системы и минимизирует возможные потери информации или времени.
    • Открытый исходный код. ClickHouse — это проект с открытым исходным кодом, что позволяет сообществу разработчиков активно вносить свой вклад и улучшать базу данных.

    Среди недостатков обычно называют:

    • Сложность конфигурации. Настройка ClickHouse может быть непростой, особенно при работе с крупными кластерами или специфическими требованиями производительности.
    • Ограничения по поддержке транзакций. Транзакции — это набор операций с данными, которые должны быть выполнены либо все вместе успешно, либо ни одна из них не должна быть выполнена, чтобы гарантировать согласованность данных. ClickHouse не поддерживает транзакции в полном объеме, как это делают некоторые другие СУБД.  Это ограничение может быть недостатком для приложений, в которых важен высокий уровень гарантии согласованности данных, например банковских приложений. Но ClickHouse обычно используют для аналитика: здесь важнее скорость и производительность обработки больших объемов данных, а не их строгая согласованность.
    • Ограниченную поддержку интеграции. ClickHouse хорошо интегрируется с различными инструментами аналитики и отчетности, но интеграция с некоторыми другими системами может быть сложной — например, с системами управления содержимым (CMS), системами управления ресурсами предприятия (ERP) или системами управления отношениями с клиентами (CRM).

    Основы работы с ClickHouse

    Установка

    ClickHouse может работать на любом дистрибутиве Linux и на операционных системах FreeBSD или MacOS.

    Быстро установить СУБД можно с помощью простой команды в консоли:

    curl https://clickhouse.com/ | sh

    ClickHouse обычно устанавливается из deb- или rpm-пакетов — актуально для операционных систем на базе Debian (таких как Ubuntu) и на базе Red Hat (таких как CentOS и Fedora).

    Выбираем нужные deb-пакеты и выполняем:

    sudo apt-get install -y apt-transport-https ca-certificates dirmngr
    
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754
    
    echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \
    
        /etc/apt/sources.list.d/clickhouse.list
    
    sudo apt-get update
    
    sudo apt-get install -y clickhouse-server clickhouse-client
    
    sudo service clickhouse-server start

    Найти больше способов установки — в том числе из Docker-образа или из исходного кода — можно в документации ClickHouse.

    Создание таблицы

    Чтобы создать таблицу в ClickHouse, нужно определить структуру таблицы и использовать команду CREATE TABLE. Синтаксис ClickHouse очень похож на SQL. Посмотрим на примере.

    Предположим, что вы хотите создать таблицу «users» со следующими полями: «id» (уникальный идентификатор пользователя), «name» (имя пользователя) и «age» (возраст пользователя). Вы можете сделать это следующим образом:

    CREATE TABLE IF NOT EXISTS users (
    
      id UUID,
    
      name String,
    
      age Int32
    
    )
    
    ENGINE = MergeTree();

    Эта команда создаст таблицу «users» с указанными полями. Чтобы добавить пользователя, нужно воспользоваться командой:

    INSERT INTO users (id, name, age) VALUES (‘1’, ‘Мария’, 25);

    Простые запросы

    Обратимся к другим простым и распространенным операциям с данными.

    SELECT * FROM users; — выбрать все поля из таблицы «users».

    SELECT name FROM users WHERE age = 25; — выбрать поле «name» для пользователей с возрастом «25».

    UPDATE users SET age = 26 WHERE name = ‘Мария’; — обновить возраст для пользователя с именем «Мария» на «26».

    DELETE FROM users WHERE name = ‘Мария’; — удалить запись для пользователя с именем «Мария».

    С более сложными примерами, а также с примерами аналитики больших данных можно познакомиться в соответствующем разделе документации, а еще на странице ClickHouse есть тестовые наборы данных — можно попрактиковаться с датасетами, приближенными к реальным задачам.

    Кратко о ClickHouse

    ClickHouse — столбцовая система управления базами данных для онлайн-обработки аналитических запросов. Она написана на C++ и использует архитектуру без разделяемых ресурсов. Синтаксис ClickHouse похож на SQL, при этом в нем есть много удобных конструкций и функций для построения запроса.

    СУБД была создана командой «Яндекса». Первая версия была опубликована в 2009 году, а в 2016-м проект стал опенсорсным.

    Полезные ссылки

    1. SQL, R или Python: какой язык учить аналитику данных?
    2. Языки программирования для Data Science и баз данных
    3. 13 книг, которые точно стоит прочитать аналитику данных

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии