C.3. Таблицы #

C.3.1. Какие таблицы есть в Shardman? #

Помимо локальных типов таблиц Shardman поддерживает распределённые таблицы: глобальные и сегментированные.

C.3.2. Что такое глобальные таблицы? #

Глобальная таблица в Shardman — это таблица с одинаковой схемой и содержимым во всех сегментах кластера. Глобальные таблицы создаются так:

CREATE TABLE g(id bigint PRIMARY KEY, t text) WITH(global);
    

Копия такой таблицы создаётся в каждом сегменте. Репликация данных глобальных таблиц основана на триггерах. При вставке данных в такую таблицу на любом узле кластера происходит репликация данных на другие узлы. При создании глобальной таблицы необходимо указать неоткладываемый первичный ключ.

C.3.3. Для чего используются глобальные таблицы? #

Глобальные таблицы подходят для каталогов и других относительно небольших и редко изменяемых таблиц. Глобальные таблицы НЕ подходят для хранения больших объёмов данных и интенсивной нагрузки при выполнении INSERT/UPDATE/DELETE, особенно при высококонкурентном доступе (витринах, очередях и т. д.).

C.3.4. Что такое сегментированные таблицы? #

Сегментированные таблицы — это таблицы, части которых размещены в разных сегментах. Каждый сегмент хранит свою часть данных из такой таблицы. Сегментированная таблица может быть создана следующим образом:

CREATE TABLE ... WITH(distributed_by = 'column_name', num_parts = number_of_partitions);
    

Здесь:

distributed_by — поле таблицы, являющееся ключом сегментирования.

num_parts — (default = 24) количество секций, на которые изначально разбита таблица.

Затем эти части распределяются по сегментам.

C.3.5. Какие параметры секционирования оптимальны при создании сегментированной таблицы? #

Количество секций должно быть не меньше количества сегментов, включая те, которые могут добавиться позже. Рекомендуется выбирать число с большим количеством делителей, например 12 или 24, чтобы можно было равномерно разделить таблицу на 2, 3, 4 или 6 сегментов. Большое количество секций увеличивает нагрузку на планирование и выполнение запросов, поэтому желательно увеличивать количество секций до разумных пределов.

C.3.6. Что такое совмещённые таблицы? #

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

C.3.7. Как создать совмещённую таблицу? #

CREATE TABLE ... WITH(distributed_by = 'column_name', num_parts = number_of_partitions, colocate_with = 'distributed_table');
    

Здесь:

distributed_by = 'column_name' — это имя ключа сегментирования, которое вызывается в создаваемой совмещённой таблице (не таблицы, с которой будет совмещение),

colocate_with = 'distributed_table' — имя таблицы, с которой нужно совместить части совмещённой таблицы.

C.3.8. Что такое локальные таблицы? #

Локальная таблица — это таблица, размещённая только в том сегменте, где она была создана.

C.3.9. Есть ли в Shardman поддержка внешних ключей? #

Внешние ключи используются в Shardman, но с некоторыми ограничениями:

  • С глобальными таблицами, как из сегментированных таблиц, так и из других глобальных таблиц

  • Между сегментированными совмещёнными таблицами

Внешние ключи запрещены:

  • Из глобальных в сегментированные таблицы

  • Между сегментированными таблицами, если они не совмещённые