Пейджер

🌍 Привет мир! 👋🏻

🌍 Привет мир! 👋🏻

Давненько не было постов, но так уж получилось, заболел 🤕.., и сил хватало только на работу. Cегодня я подготовил для вас что-то новенькое, поговорим про ClickHouse, а конкретно про такие движки как Distributed и ReplicatedMergeTree и их взаимодействие.

🚀 Мотивация

ReplicatedMergeTree и Distributed эта связка является наиболее популярной и наиболее проверенным решением. Примененяя эти типы при развертывании, вы закроете такие пункты как надежность, производительность и масштабирование.

Что такое ClickHouse

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

✏️ Введение

Будет полезно знать базовые понятия которые встречаются повсеместно при чтении документации:

📌 Shard (шард) — это часть данных, расположенная на отдельном сервере или группе серверов. Шарды используются для горизонтального масштабирования: данные делятся на части, и каждая часть хранится отдельно, позволяя параллельно обрабатывать большие объёмы данных.
📌 Replica (реплика) — это точная копия данных которая может лежать на другом сервере. Реплики обеспечивают отказоустойчивость и позволяют повысить производительность чтения данных.
📌 Кластер в ClickHouse — это группа серверов, объединённых вместе для обработки запросов и хранения данных. Кластеры обычно состоят из нескольких шардов и реплик.

🔖 ReplicatedMergeTree

Это версия движка таблиц MergeTree в ClickHouse с поддержкой репликации данных.

При создании таблицы с движком ReplicatedMergeTree необходимо указать путь в ZooKeeper и имя реплики:

CREATE TABLE my_table (
  id UInt64,
  date Date,
  data String
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/my_table', '{replica}')
PARTITION BY toYYYYMM(date)


💡 Из важного нужно знать:
• Используется ClickHouse Keeper или ZooKeeper для хранения метаданных репликации
• Поддерживается автоматическая синхронизация данных между репликами
• Репликация происходит на уровне отдельных таблиц, а не всего сервера
• Между узлами передаются только сжатые части данных, а не запросы. Слияния обрабатываются на каждой реплике независимо, поэтому снижается нагрузка на сеть.

🔖 Distributed

Это движок таблиц в ClickHouse, который обеспечивает распределенную обработку запросов на нескольких серверах:

CREATE TABLE table_distributed AS my_table
ENGINE = Distributed(my_cluster, mess, my_table, rand());


Параметры:

- my_cluster — имя кластера в конфигурации сервера
- mess — имя удаленной базы данных
- my_table — имя удаленной таблицы
- rand() — (опционально) ключ шардирования для распределения данных

💡 Из важного нужно знать:
• Не хранит данные, а равномерно распределяет данные и запросы между несколькими нодами.
• Собирает и объединяет результаты с разных серверов
• Перенаправляет INSERT-запросы на соответствующие шарды согласно ключу шардирования

💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍

#CLICKHOUSE
Медиа 1
Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.
Подписаться на @ivanchikovitclub Открыть пост в Telegram