Особенности столбцовых СУБД
Эта БД предназначена для задач, связанных с аналитической обработкой данных, и не подходит там, где основная часть операций — обработка транзакций. Чтобы разобраться в том, почему это так, давайте сначала разберёмся с различными сценариями работы с данными.
Базы данных помогают решать различные задачи. То, какие при этом делаются запросы, насколько их много и как соотносятся операции чтения и записи, называют сценарием работы с данными. Универсальной БД, которая подходит для любого сценария, не существует.
Сценарии можно разделить на две группы:
- Обработка транзакций, т. е. связанных между собой операций с данными. Классический пример — банковский перевод, при котором в БД одновременно изменяются записи о количестве денег на двух счетах.
- Обработка аналитических запросов (online analytical processing, OLAP). В этом случае требуется быстро извлечь из БД сведения.
Например, если у вас есть мобильное приложение, то вас интересуют его продуктовые метрики: количество уникальных пользователей, среднее время нахождения на экране, среднее время, необходимое, чтобы выполнить последовательность действий… Вы отслеживаете, как меняются метрики, и решаете, как развивать приложение. Если метрики хранятся в большой БД, а запросы к ней выполняются медленно, то анализ метрик тоже станет весьма небыстрым.
Как правило, при OLAP-сценариях:
- данные в базе не изменяются или изменяются редко (нет команд модификации существующих данных типа
UPDATE
илиREPLACE
); - данные добавляются в базу крупными порциями (командой
INSERT
); - большинство запросов — это операции чтения;
- данные читаются из большого количества строк и небольшого количества столбцов;
- на выходе данные фильтруют или агрегируют, поэтому результат выполнения запроса содержит гораздо меньше исходных данных;
- нет транзакций;
- нет строгих требований к консистентности данных.
Классические реляционные БД не всегда удобно использовать для задач, в которых идут частые и сложные запросы к большому массиву данных. Для решения таких задач разработаны столбцовые (колоночные) БД. О них мы кратко говорили раньше.
Строковые и столбцовые БД обрабатывают аналитические запросы по-разному. Предположим, для выполнения запроса нужны данные из трёх столбцов БД. В строковой придётся полностью прочитать несколько десятков или сотен тысяч строк со всеми столбцами, а в столбцовой — только данные из этих трёх столбцов.
Более того, в столбцовой БД эти данные физически хранятся вместе, что ещё больше ускоряет ответ.
О Clickhouse
ClickHouse — одна из популярных столбцовых БД с открытым исходным кодом. Яндекс создал ClickHouse, когда понадобилось быстро обрабатывать аналитические онлайн-запросы к Яндекс Метрике.
ClickHouse работает на любой операционной системе Linux, FreeBSD или macOS, а также доступна в виде сервиса управляемой БД в Yandex Cloud.
ClickHouse позволяет создавать БД и таблицы, загружать в них данные из разных источников и выполнять к данным запросы. Эту СУБД можно интегрировать с Apache Kafka, а также с внешними источниками данных, включая БД MySQL и PostgreSQL.
Высокая скорость работы ClickHouse достигается за счёт:
- Шардирования. Вы можете разделить данные на шарды (т. е. части) и хранить их на одном или нескольких хостах-репликах. Кроме того, шардирование повышает доступность БД.
- Автоматического распараллеливания запросов на несколько процессорных ядер одного сервера и распределённых вычислений на шардированном кластере.
- Возможности приближенных вычислений. Система способна выполнять запросы на основе части данных (выборки). Можно агрегировать данные не по всем ключам, а по некоторым. Иногда это помогает получить довольно точный результат, задействовав меньше ресурсов.
- Других архитектурных особенностей: индекса (первичного ключа), физической сортировки данных по первичному ключу с помощью merge дерева, хранения данных в сжатом виде и т. д.
ClickHouse предназначен прежде всего для работы с аналитическими запросами. Если вам нужны транзакционная целостность и построчная выборка данных по ключу — применяйте другие БД, например MySQL или PostgreSQL.
Эту СУБД используют:
- чтобы анализировать логи (и мгновенно получать полную информацию об инцидентах в системе);
- чтобы отслеживать метрики поведения пользователей на сайтах (например, переходы на страницы, клики) или в онлайн-играх;
- как аналитический инструмент, когда данные в БД ClickHouse копируются из основной БД (например, PostgreSQL или Oracle), которая медленно обрабатывает аналитические запросы.
📂 YandexCloud | Последнее изменение: 15.08.2024 11:50