Масштабирование¶
Репликация¶
Поддерживаются стандартные функции синхронной/асинхронной репликации Tarantool.
Шардирование¶
TCS поддерживает горизонтальное масштабирование посредством механизма шардирования, что предполагает разбиение набора данных на части и распределение их по нескольким наборам реплик (шардам). Данные распределяются по шардам по ключу шардирования, который указывается для каждой шардированной таблицы.
Для запросов на чтение в режиме шардирования предусмотрены специальные оптимизации.
Особенности работы шардирования в TCS¶
Ограничения текущей версии TCS:
При переходе на шардированную конфигурацию требуется полная перезаливка данных.
Режим шардирования (параметр
mode.sharded) не рекомендуется включать, если в конфигурации кластера не заданы хотя бы 2 шарда.Распределение данных между шардами осуществляется на основе актуальной конфигурации кластера. Любые изменения в конфигурации наборов реплик после начальной загрузки данных могут вызвать нарушения в работе механизма шардирования. К критическим изменениям относятся:
Переименование существующих наборов реплик;
Удаление наборов реплик;
Добавление новых наборов реплик.
В случае проведения подобных операций после изменения конфигурации необходима полная перезаливка данных для обеспечения корректной работы системы шардирования.
Создание шардированных таблиц¶
Для создания шардированной таблицы используется команда CREATE TABLE с параметром SHARDED BY, где указывается ключ, по которому будет проводиться шардирование.
Ключ шардирования может быть строкой, числом или составным ключом.
При выборе ключа рекомендуется руководствоваться несколькими принципами:
запросы должны быть максимально локализованы;
данные должны быть сбалансированы по ключу.
Пример: создание шардированной таблицы с составным ключом
CREATE TABLE t(
a i32,
b utf8,
c u64,
d bool
)
SHARDED BY a, b
Шардированные таблицы можно создавать, только если кластер работает в режиме шардирования.
Как и все прочие запросы к кластеру в режиме шардирования, запросы на создание таблицы следует отправлять через экземпляр Scheduler, а не напрямую через экземпляр Storage.