Перейти к основному содержимому
Версия: 4.2

Настройка параметров хранения данных

Основные определения

Шард (от англ. shard) - это подмножество данных в базе данных, которое хранится на одном сервере. В контексте кластера, шарды распределяются между разными серверами для параллельной обработки запросов. Шардирование данных используется, когда общий объем данных слишком велик для одного сервера или когда требуется масштабировать систему для повышения производительности. Данные распределяются по шардам на основе определенного ключа, например, user_id или timestamp.

Реплика (от англ. replica) - это копия данных из одного или нескольких шардов, которая хранится на другом сервере. Репликация повышает отказоустойчивость системы, так как данные дублируются, и в случае сбоя одного сервера другой может продолжить работу. Репликация необходима для обеспечения высокой доступности данных и защиты от потери данных в случае отказа оборудования. Чем больше реплик, тем выше доступность, но это также требует больше ресурсов.

Настройки параметров таблиц

При использовании ISM действия Move to ClickHouse, таблицы создаются автоматически с базовыми настройками. Однако при ручном создании таблиц необходимо определить схему данных на основе маппинга индекса в OpenSearch.

Распределение на шарды

При ручном создании таблиц в кластере ClickHouse необходимо настроить распределение данных на шарды. Это позволяет эффективно распределить нагрузку на кластер и обеспечить масштабируемость. Для этого используется ключевое слово ENGINE = Distributed, которое распределяет данные по шардам на основании определенного ключа.

Репликация

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

Контроль срока хранения

Для управления сроком хранения данных в таблицах ClickHouse можно использовать опцию TTL (Time-To-Live). Она позволяет автоматически удалять или перемещать старые данные по истечении определенного времени.

Создание таблицы с поддержкой шардинга

Для того чтобы таблица задействовала насколько шардов при создании таблицы необходимо использовать движок Distributed, пример создания таблицы распределенной на шарды:

CREATE TABLE my_table_sharded ON CLUSTER cluster_1S_2R (
id UInt32,
name String,
age UInt8
) ENGINE = Distributed(cluster_1S_2R, default, my_table, rand());

Описание параметров движка Distributed

  • cluster_1S_2R - имя кластера, в котором будет создаваться таблица. Оно должно соответствовать названию кластера, заданном в файле конфигурации.
  • default - имя базы данных, в которой хранится локальная таблица. В данном случае default - это стандартная база данных ClickHouse, но можно использовать любое другое имя базы данных, если оно определено в конфигурации.
  • my_table - имя локальной таблицы, которая хранится на каждом узле кластера. Эта таблица должна быть создана заранее на всех узлах кластера. Распределенная таблица (my_table_sharded) будет использовать эту таблицу для хранения данных на каждом сервере.
  • rand() - функция, определяющая способ распределения данных между шардами. В данном случае используется функция rand(), которая случайным образом распределяет данные между шардами.

Конфигурация реплицированных таблиц

Реплицированные таблицы в ClickHouse позволяют хранить копии данных на нескольких узлах, обеспечивая их доступность и отказоустойчивость. Для создания реплицированной таблицы необходимо указать параметры ENGINE = ReplicatedMergeTree и задать пути к ClickHouse Keeper.

Пример конфигурации реплицированной таблицы:

CREATE TABLE example_table
(
id UInt32,
name String,
value Float32
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/example_table', '{replica}')
ORDER BY id;

Описание параметров ReplicatedMergeTree

  • /clickhouse/tables/{shard}/example_table - путь к таблице в ClickHouse Keeper. Этот параметр определяет путь, по которому хранятся метаданные реплицированной таблицы в ClickHouse Keeper.
  • {shard} - переменная, которая автоматически заменяется на идентификатор шардированного узла, на котором создается таблица.
  • example_table - имя таблицы. Оно должно быть одинаковым для всех реплик, чтобы система могла корректно синхронизировать данные.
  • {replica} - переменная, которая автоматически заменяется на имя или идентификатор конкретного узла (реплики) в кластере.

Настройка TTL (Time to live) для данных

Time to Live (TTL) в ClickHouse - механизм автоматического удаления или перемещения данных по истечении заданного времени. TTL задается на уровне таблицы или отдельных столбцов, указывая, как долго данные должны храниться.

Создание таблицы с параметрами TTL

Пример создания таблицы с настройкой TTL:

CREATE TABLE example_table
(
id UInt32,
name String,
timestamp DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY id
TTL timestamp + INTERVAL 1 MONTH
SETTINGS storage_policy = 'default';

TTL timestamp + INTERVAL 1 MONTH - данное выражение определяет правило автоматического удаления данных. Все строки, у которых временная метка, хранимая в столбце timestamp, старше 1 месяца от текущей даты, будут автоматически удаляться.

Пример настройки TTL для существующей таблицы

Применение параметров TTL к существующей таблице:

ALTER TABLE example_table
MODIFY TTL timestamp + INTERVAL 1 MONTH;

После применения TTL, можно проверить, что настройки были применены корректно:

SHOW CREATE TABLE example_table;

В выводе команды вы должны увидеть секцию TTL с вашими настройками.