Политики распределения данных
YMatrix поддерживает три основные политики распределения данных, определяющие способ хранения данных по узлам кластера и напрямую влияющие на производительность запросов и стабильность кластера.
Обзор политик распределения
| Метод распределения |
Сценарий использования |
Преимущества |
Недостатки |
| HASH |
Крупные таблицы, участвующие в соединениях по равенству по ключу распределения |
Строки с одинаковым значением ключа размещаются на одном узле, что обеспечивает эффективные соединения по равенству |
Недостаточная случайность значений ключа может привести к перекосу данных (data skew) |
| RANDOM |
Крупные таблицы, не требующие соединений и не имеющие подходящего ключа распределения |
Более равномерное распределение данных, снижающее риск перекоса |
Непредсказуемое размещение данных; оптимизатор не может использовать шаблоны распределения для оптимизации |
| REPLICATED |
Небольшие таблицы, редко обновляемые, но часто используемые в JOIN или индексах |
Полная копия таблицы хранится на каждом узле |
Увеличенный объём занимаемого места |
Хэш-распределение (HASH)
Принцип работы
- При создании таблицы один или несколько столбцов указываются в качестве ключа распределения.
- При вставке данных система вычисляет хэш-значение на основе ключа распределения и направляет строку на определённый segment-узел.
- Значения
NULL также хэшируются и назначаются конкретному сегменту так же, как и любые другие значения, что обеспечивает согласованное поведение при распределении.
Ключевые преимущества
- Равномерное распределение данных: ключ распределения с высокой кардинальностью предотвращает возникновение «горячих точек» из-за чрезмерной нагрузки на один узел.
- Высокая производительность запросов: запросы с условиями равенства (
WHERE column = value) могут напрямую обращаться к соответствующему сегменту без сканирования других узлов.
- Эффективные JOIN’ы: при соединении нескольких таблиц по одному и тому же ключу распределения объём передачи данных между сегментами минимален, что повышает скорость выполнения соединений.
Сценарии использования
- Большинство бизнес-таблиц (справочники сущностей, факт-таблицы), особенно с частыми запросами и большим объёмом данных.
- Сценарии, требующие частых точечных запросов или многотабличных соединений (например, финансовые системы, системы обработки заказов в электронной коммерции).
- Таблицы с чётко выраженным измерением запросов высокой кардинальности.
Случайное распределение (RANDOM)
Принцип работы
- Данные случайным образом распределяются по segment-узлам при вставке.
- Ключ распределения не требуется; система автоматически обеспечивает равномерное распределение по узлам.
Ключевые преимущества
- Полностью равномерное распределение данных без «горячих точек».
- Простая конфигурация — не требуется проектировать ключ распределения.
Сценарии использования
- Временные таблицы ETL и промежуточные таблицы обработки.
- Тестовые таблицы или небольшие таблицы с низкой частотой запросов.
- Таблицы без чётких измерений запросов и не требующие многотабличных соединений.
Примечания
- Соединения (JOIN) между таблицами требуют перераспределения данных по всем узлам, что приводит к снижению производительности. Не подходит для основных бизнес-таблиц.
Реплицированное распределение (REPLICATED)
Принцип работы
- Полная копия таблицы хранится на каждом segment-узле кластера.
- Запросы могут читать данные непосредственно с локального узла без межузловой передачи данных.
Ключевые преимущества
- Чрезвычайно высокая производительность запросов на одном узле: отсутствие перемещения данных обеспечивает быстрое время отклика.
Сценарии использования
- Небольшие таблицы (обычно менее 100 МБ), такие как измерения (dimension tables), справочники кодов или таблицы конфигураций.
- Часто запрашиваемые небольшие таблицы (например, план счетов, таблицы ролей пользователей).
- Измерения, участвующие в соединениях со множеством других таблиц (например, справочные таблицы ГИС).
Примечания
- Высокие накладные расходы на хранение: избыточность данных линейно возрастает с увеличением числа узлов.
- Сниженная производительность записи: все копии на всех узлах должны обновляться синхронно, что делает данный метод непригодным для таблиц с частыми операциями записи.