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 — поле таблицы, являющееся ключом сегментирования.

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, но с некоторыми ограничениями:

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

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

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

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

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