Создание шардированной таблицы

ПРИМЕЧАНИЕ: Автошардирование требует Manticore Buddy. Если автошардирование не работает, убедитесь, что Buddy установлен и запущен.

Manticore позволяет создавать шардированные таблицы — особый тип таблиц (type='shard'), который прозрачно распределяет чтение и запись между несколькими физическими шардами. Эта возможность особенно полезна при масштабировании данных. Можно создавать как локальные шардированные таблицы на одном сервере, так и реплицированные шардированные таблицы в многонодовом репликационном кластере, чтобы оптимизировать распределение данных.

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

  • Они обеспечивают более высокую производительность записи, потому что данные пишутся сразу в несколько шардов параллельно, а системные ресурсы используются эффективнее. Такая параллельная запись дает более высокую скорость индексации по сравнению с одной большой таблицей.
  • Шардированные таблицы поддерживают репликацию из коробки, повышая доступность системы. Вам не нужно настраивать репликацию вручную. Просто задайте коэффициент репликации при создании шардированной таблицы, и система сама все сделает. Такая встроенная репликация обеспечивает непрерывный доступ к данным даже при отказе части узлов.

Параметры

  • shards='N' — число физических шардов, которые нужно создать. Обязательный параметр. Должно быть положительным целым числом, максимум 3000.
  • rf='M' — коэффициент репликации: число копий, которое хранится для каждого шарда. Обязательный параметр. На одном узле он должен быть 1; в репликационном кластере — от 1 до числа узлов в кластере.
  • timeout='S' — сколько времени в секундах ждать подготовки шардов при создании. По умолчанию 30. Увеличьте значение, если создаете много шардов на большом числе узлов.

Значения нужно указывать в кавычках (shards='10', а не shards=10). Имена параметров не чувствительны к регистру.

Создание локальной шардированной таблицы

Чтобы создать локальную шардированную таблицу, создайте таблицу как обычно и добавьте shards='N' и rf='1'. shards — это число физических шардов, которые будут созданы за таблицей. rf — коэффициент репликации. На одном сервере он должен быть 1.

Вот пример, который создает таблицу с 10 шардами и автоматически распределяет данные между ними:

CREATE TABLE local_sharded shards='10' rf='1'

После этого запроса вы получаете одну шардированную таблицу, у которой все шарды уже настроены. Физические шарды находятся в базе system и скрыты из SHOW TABLES; вы работаете с шардированной таблицей по ее публичному имени, а система автоматически направляет операции к нужным шардам.

Создание реплицированной шардированной таблицы

Чтобы защититься от отказов сервера, настройте репликационный кластер на тех узлах, которые должны участвовать. Далее в этой документации мы будем считать, что созданный вами кластер называется c. Добавьте все нужные узлы, следуя инструкциям по репликации, а затем создайте таблицу с нужным коэффициентом репликации.

Например, допустим, у вас есть 3-узловой репликационный кластер и вы хотите таблицу, разбитую на 10 шардов, с одной копией каждого шарда на каждом узле. При участии трех узлов нужно задать rf='3':

CREATE TABLE c:cluster_sharded shards='10' rf='3'

После этого можно работать с таблицей по ее обычному имени на любом узле кластера — для INSERT, SELECT, UPDATE и DELETE не нужен префикс кластера. Префикс кластера (c:) используется только для DDL, например CREATE TABLE и DROP TABLE.

Стандартное время ожидания завершения всех процессов подготовки шардов при создании — 30 секунд. Иногда при создании большого числа шардов в репликационном кластере с несколькими узлами это занимает чуть больше времени из-за сетевой задержки. При необходимости это время можно увеличить с помощью параметра timeout:

CREATE TABLE c:cluster_sharded shards='10' rf='3' timeout='60'

Если время ожидания будет превышено, создание таблицы завершится с ошибкой, и вам придется повторить попытку с большим значением timeout.

Удаление шардированной таблицы

Чтобы удалить шардированную таблицу, используйте стандартную команду DROP TABLE. В кластерной среде указывайте имя кластера в имени таблицы, чтобы точно обратиться к нужной таблице. Поддерживается IF EXISTS.

Чтобы удалить локальную шардированную таблицу:

DROP TABLE local_sharded
DROP TABLE IF EXISTS local_sharded

Чтобы удалить реплицированную шардированную таблицу:

DROP TABLE c:cluster_sharded
DROP TABLE IF EXISTS c:cluster_sharded

Просмотр шардированных таблиц

DESC <table> возвращает пользовательскую схему полей шардированной таблицы (те столбцы, которые вы объявили).

SHOW CREATE TABLE <table> возвращает пользовательское определение с shards='N' rf='M' — внутренняя топология type='shard' (клаузулы local=/agent= для каждого шарда и репликационный кластер с md5-именем) намеренно скрыта. Чтобы посмотреть раскрытую внутреннюю топологию для диагностики, используйте SHOW CREATE TABLE <table> OPTION force=1.

Для проверки состояния подсистемы шардирования предусмотрены две дополнительные команды:

  • SHOW SHARDING STATUS [[<cluster>:]<table>] — показывает размещение и состояние каждого шарда. Без аргументов выводит все шардированные таблицы; с именем таблицы (при желании с префиксом кластера) фильтрует вывод только по ней. Возвращаемые столбцы: table, shard, node, status (active/inactive), cluster, replication_cluster, rf и rf_status (ok/degraded/broken).

     SHOW SHARDING STATUS
     SHOW SHARDING STATUS cluster_sharded
     SHOW SHARDING STATUS c:cluster_sharded
  • SHOW SHARDING MASTER — показывает, на каком узле сейчас запущен процесс sharding master, и находится ли он в состоянии active или inactive.

     SHOW SHARDING MASTER
Last modified: June 12, 2026