Остались вопросы?
Мы с удовольствием вам поможем
Спасибо! Ваша заявка принята.
Ваша заявка принята. Наш менеджер скоро с вами свяжется
Заказать звонок
Спасибо! Ваша заявка принята.
Спасибо за обращение.
Мы обязательно свяжемся с вами

Время работы офиса
Пн-Пт: 8:00 — 18:00
Сб: 10:00 — 16:00
Вс: выходной

Для чего нужны колоночные СУБД и как мы используем ClickHouse в наших сервисах

Никита Лебедь
22.11.2024
15 мин. читать

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


Каких типов бывают системы управления данными?

Диджитализация привела не только к появлению новых возможностей для онлайн-проектов и пользователей, но и к необходимости обрабатывать большое количество данных. Для решения задач Big Data, Data Science, Machine Learning, IoT и множества других направлений используются различные системы управления базами данных (СУБД). 



Типы СУБД

  • Реляционные: MySQL, MSSQL, PostrgeSQL. Используются при частом изменении данных и при выдаче небольшого количества записей за одну операцию. Поддерживают транзакции.
  • Key-value (ключ-значение): Redis, DynamoDB и Aerospike. Используются в основном для кеша и логирования.
  • Документно-ориентированные: MongoDB, CouchDB и Amazon DocumentDB. Используются для хранения неструктурированных данных в виде документов.
  • Колоночные: Vertica, Google Big Query, ClickHouse. Эффективны при выполнении аналитических запросов, создании отчетов, чтении и сжатии данных.
  • Графовые: Neo4j, Amazon Neptune. Используются для хранения данных со сложными взаимосвязями, например в социальных сетях и рекомендательных системах.
  • Поисковые: Elasticsearch, Apache Solr и Amazon CloudSearch. Оптимизированы для быстрого поиска файлов, например для текстового контента при работе со статьями и блогами.

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


Особенности колоночных СУБД

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

Колоночные СУБД хранят данные в столбцах. И это позволяет существенно ускорить аналитические команды, создание отчетов, чтение и запись. При выполнении запроса в колоночной БД можно задействовать только необходимые для конкретного сценария данные: в каждом столбце хранится однотипная информация. Поэтому при чтении ClickHouse работает в 100—1000 раз быстрее традиционных СУБД.

Колоночные СУБД активно используются для онлайн-обработки аналитических запросов (OLAP), которым свойственно следующее:

  • преобладание команд для чтения информации;
  • добавление данных массивами от 1000 строк; 
  • вставка новых строк без изменений текущих;
  • считывание в сервисах множества строк БД и лишь немногих столбцов.

В наших сервисах для быстрой обработки данных, например при выводе метрик, мы используем ClickHouse — колоночную СУБД на базе SQL.


Плюсы ClickHouse:

  • Решение с открытым исходным кодом.
  • Считывание только нужных столбцов, эффективное сжатие однотипных данных и ускоренная обработка запросов.
  • Быстрый доступ к конкретным значениям или диапазонам.
  • Оптимизация издержек на контроль и эффективное использование CPU.
  • Эффективное сжатие.
  • Быстрая вставка: 100 тысяч строк из логов можно вставить в ClickHouse за 2 секунды. 


Минусы ClickHouse:

  • Ограничения в поддержке JOIN-запросов.
  • Отсутствие поддержки транзакций.
  • Медленная одиночная вставка.
  • Рекомендованная частота вставки — раз в секунду.

При работе с ClickHouse желательно заранее продумать структуру БД и будущие запросы. И лучше указать порядок сортировки данных при создании таблиц: например, по id, дате или полю с кодом страны. Обычно схема таблиц не меняется после создания, а если нужно ее изменить — это будет медленно и сложно.

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

Так как каждая колонка содержит одну и ту же категорию информации становится проще и выборка данных (select). Данные каждого столбца хранятся независимо от других. За счет этого при запросах считывается только несколько колонок, информация из которых и требуется по запросу. Например, из 100 столбцов система обратится только к 5 и быстро выполнит запрос.

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


Взаимодействие с ClickHouse

Работа с данными востребована во множестве направлений digital, IT и других отраслях. Поэтому колоночные СУБД и ClickHouse в частности можно использовать в разных сферах:

  • аналитике онлайн-проектов и мобильных приложений;
  • рекламных сетях и онлайн-торгах;
  • телекоммуникации;
  • электронной коммерции;
  • информационной безопасности;
  • бизнес-аналитике;
  • онлайн-играх;
  • интернете вещей.

Поддерживаемые библиотеки: PHP, Go, Swift, NodeJs, Perl, Ruby, Rust, R, Java, Scala, Kotlin, C#, Elixir, Nim, Haskell.

Колоночные СУБД оптимизированы для выполнения агрегационных операций (например, SUM, AVG, COUNT) на больших наборах данных, что делает их наиболее подходящими для аналитики, отчетности и других задач.

Примеры использования

  • логи (с авто-удалением: TTL);
  • исторические данные (IP вчера, позавчера, год назад);
  • визиты (кто, откуда);
  • биллинг (конкретизация стоимости).


Сжатие данных

Эффективнее проводить сжатие в одной колонке однообразных данных, чем разнообразных. Например, столбец с ячейками country_code1, country_coude2... будет обработан проще и быстрее, чем набор из ID, IP, кода страны и других данных.

  • Методы: для чисел, даты, строк.
  • Преимущества: на каждую колонку можно указать свой метод.
  • Недостатки: высокая степень сжатия потребляет ресурсы.

Пример реализации: Таблицу на 114 Гб можно сжать до 3.65 ГБ.

В колоночных базах данных проблему дублирования структуры решает сжатие.
А пустота в колонках не занимает места. Можно использовать таблицу в таблице, чтобы не выполнять лишние JOIN-запросы и еще больше повысить скорость выборки.

Лайфхаки для оптимизации:

  • nested table (таблица в таблице);
  • агрегатные функции: arraySum(arrayMap(x -> (x.2), arrayFilter(..)));
  • индексы, представления: materialized view;
  • буферизированная таблица: CREATE TABLE .. ENGINE = Buffer(..);
  • ускорение MySQL: CREATE TABLE (..) ENGINE = MySQL('host:port');

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



Как мы используем ClickHouse в наших сервисах

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

  • hoster Cloud — облачная платформа с оплатой по факту потребления и множеством решений для задач клиентов. Используем ClickHouse для расчета поминутной тарификации (биллинга) виртуальных серверов.
  • hoster Guard — платформа безопасности для защиты веб-приложений от взломов, утечек данных и отказа в обслуживании. При помощи колоночной СУБД составляем логи трафика, доступов и ошибок.
  • S3 Object Storage — облачный сервис для хранения данных, совместимый с Amazon S3. Анализируем использование хранилища и расчета тарификации.

Пример отображения метрик из личного кабинета hoster Guard


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


Поделиться:
Подпишитесь на email-рассылку!

Будьте в курсе новостей. Отправляем полезные письма каждый месяц.

Пожалуйста, введите адрес электронной почты
Пожалуйста, подтвердите согласие с условиями обработки персональных данных.
article mailing picture
Вы подписались на нашу рассылку!

Скоро вы получите новое письмо.

article mailing picture