C.3. Таблицы #
- C.3.1. Какие таблицы есть в Shardman?
- C.3.2. Что такое глобальные таблицы?
- C.3.3. Для чего используются глобальные таблицы?
- C.3.4. Что такое сегментированные таблицы?
- C.3.5. Какие параметры секционирования оптимальны при создании сегментированной таблицы?
- C.3.6. Что такое совмещённые таблицы?
- C.3.7. Как создать совмещённую таблицу?
- C.3.8. Что такое локальные таблицы?
- C.3.9. Есть ли в Shardman поддержка внешних ключей?
- C.3.2. Что такое глобальные таблицы?
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, но с некоторыми ограничениями:
С глобальными таблицами, как из сегментированных таблиц, так и из других глобальных таблиц
Между сегментированными совмещёнными таблицами
Внешние ключи запрещены:
Из глобальных в сегментированные таблицы
Между сегментированными таблицами, если они не совмещённые