0

Особенности сервиса управляемых баз данных ClickHouse

26.04.2022

На этом уроке мы рассмотрим особенности реализации БД ClickHouse в Yandex.Cloud.

Типы хранилища

При создании кластера ClickHouse вы можете выбрать быстрое локальное (local-ssd), быстрое сетевое (network-ssd) или стандартное сетевое (network-hdd) хранилище. Сетевые хранилища используют обычные сетевые диски: такие же, как в виртуальных машинах.Если локальный диск откажет, все сохранённые на нём данные будут потеряны. Чтобы этого избежать, при выборе локального хранилища сервис автоматически создаст отказоустойчивый кластер минимум из двух хостов.На стадии preview находятся ещё два типа хранилища:

  • Гибридное. Часто используемые, горячие данные хранятся на дисках сетевого хранилища, а редко используемые, холодные — в объектном хранилище Yandex.Cloud.
  • Нереплицируемые диски — по сути, быстрые сетевые хранилища на SSD-дисках, для которых не предусмотрена репликация на уровне облака. Производительность системы повышается за счёт снижения надёжности хранения данных. Но для хранения БД этот недостаток не критический: репликацию можно настроить на уровне сервиса управляемых БД.

Стандартное сетевое хранилище заметно дешевле других вариантов. Но если скорость доступа к БД вас не устраивает, то выбирайте быстрое сетевое или быстрое локальное хранилище.

Обновления СУБД

Релизы ClickHouse выходят довольно часто. Поэтому сервис управляемых БД ClickHouse использует небольшой набор версий СУБД и регулярно его актуализирует. Кластеры с устаревшей, т. е. уже не поддерживаемой версией ClickHouse автоматически обновляются.Сервис использует два типа версий: с расширенным периодом поддержки (LTS — long term support) и промежуточные.LTS-версии выходят раз в полгода. Поддерживается только две таких версии: текущая и предыдущая. То есть поддержка LTS-версии длится один год. Неподдерживаемая LTS-версия обновляется сразу до текущей.

image

При выходе новой промежуточной версии прекращается поддержка самой старой из них. При этом одновременно поддерживается не более трёх промежуточных версий.

image

Резервное копирование

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

image

Данные в резервной копии хранятся только для таблиц, использующих движки семейства MergeTree. Это наиболее функциональные движки таблиц ClickHouse. Когда в таблицу на таком движке вставляется большое количество данных, эти данные записываются частями, которые затем объединяются по определённым правилам в фоновом режиме. Для остальных движков в резервной копии хранятся лишь схемы таблиц.

Шардирование

Шардирование используется для горизонтального масштабирования кластера, при котором части одной БД ClickHouse размещаются на разных шардах. Шард — это один или несколько хостов-реплик. Запрос на запись или чтение в шард можно отправить на любую его реплику, выделенного мастера нет.Чтобы распределить данные по шардам, нужно создать распределённую таблицу. Части данных фактически хранятся в нижележащих таблицах на хостах каждого шарда, а распределённая таблица маршрутизирует запросы к этим таблицам.ClickHouse определяет, на какой шард поместить новые данные, с помощью ключа шардирования. Выбирайте ключ так, чтобы данные логично распределялись по шардам и данные разных шардов не были связаны между собой.Кластеры управляемых БД ClickHouse изначально создаются с одним шардом. Чтобы воспользоваться преимуществами шардирования, вам понадобится добавить еще один или несколько шардов и создать распределенную таблицу.

Словари

Словарь — это хранилище данных типа «ключ-значение», которое полностью или частично находится в оперативной памяти сервера ClickHouse.Основное преимущество словарей — высокая скорость работы по сравнению с операциями JOIN. Словари полезны, когда приходится часто обращаться к справочнику, чтобы получить набор значений по ключу.В качестве источников данных словарей могут выступать встроенные словари ClickHouse или внешние источники: HTTP-ресурсы или другая БД (MySQL, ClickHouse, MongoDB, PostgreSQL).Сервис также содержит встроенный словарь-геобазу и набор функций для работы с ним. Геобаза позволяет:

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

Подробнее о функциях для работы со встроенными словарями читайте в документации.Если встроенная геобаза вам не подходит, подключите к ClickHouse собственную геобазу.

Машинное обучение

Сервис позволяет анализировать данные с помощью моделей машинного обучения CatBoost без использования дополнительных инструментов. Чтобы применить модель, подключите её к кластеру и вызовите в SQL-запросе с помощью встроенной функции modelEvaluate(). В результате выполнения запроса модель выдаст предсказания для каждой строки входных данных. Подробная информация о машинном обучении в ClickHouse приводится в документации.

Тарификация

При планировании расходов на кластер ClickHouse учитывайте то, что при создании кластера из двух и более хостов автоматически создаётся ещё три хоста ZooKeeper. Хосты ZooKeeper тарифицируются по тому же принципу, что и обычные: за время использования ядер процессора и оперативной памяти.

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380