Перейти к содержанию

Типы таблиц

В данном разделе описаны доступные в Picodata типы таблиц и приведены рекомендации по выбору типа в зависимости от характера нагрузки и задач эксплуатации СУБД.

Шардированные таблицы

Описание

Шардирование в SQL — это метод горизонтального масштабирования, при котором одна большая таблица разбивается на части (шарды) по определенному ключу и распределяется по узлам кластера. Каждый шард содержит только часть строк, что позволяет параллельно обрабатывать запросы и снимать нагрузку с одного узла.

В Picodata применяется шардирование на основе хеш-функций — это обеспечивает равномерность разделения строк таблицы между узлами кластера.

Проиллюстрируем принцип шардирования. Создадим таблицу с ключом распределения по колонке region:

CREATE TABLE t (
    id INTEGER NOT NULL,
    name TEXT,
    uuid UUID,
    region TEXT,
    PRIMARY KEY (id))
USING memtx DISTRIBUTED BY (region)
OPTION (TIMEOUT = 3.0);

После заполнения данными таблица может выглядеть, например, так:

sharded_table

Если кластер Picodata располагается на трёх вычислительных узлах, то каждый из них будет хранить часть строк таблицы — в соответствие с тем, по какой колонке задано распределение:

distributed_sharded_table

Распределенность в Picodata проявляется в виде поддержки шардированных таблиц — это ключевое преимущество данной СУБД.

При этом, SQL-планировщик предоставляет интерфейс доступа к шардированной таблице целиком — соответственно, при необходимости он может обойти несколько узлов при исполнении запроса.

См. также:

Рекомендации по использованию

Используйте шардированные таблицы в тех случаях, когда в БД требуется хранить часто меняющиеся данные и предполагается значительная нагрузка на запись в кластере.

Нежурналируемые таблицы

Описание

Нежурналируемые таблицы — разновидность шардированных таблиц. Обновления такой таблицы не записываются в журнал упреждающей записи. Если доступность мастера репликасета, на котором хранится нежурналируемая таблица, теряется (например, при перезапуске соответствующего инстанса), то хранимая на репликасете часть таблицы будет утеряна. Нежурналируемые таблицы не реплицируются, и могут быть созданы только на движке хранения данных memtx. Достоинством нежурналируемых таблиц является более быстрое исполнение DML-запросов.

Рекомендации по использованию

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

Глобальные таблицы

Описание

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

Рекомендации по использованию

Используйте глобальные таблицы для хранения редко меняющихся данных. Например, для этого подходят справочники, которые редко обновляются, но часто обрабатывают запросы на чтение данных.

Системные таблицы

Описание

Системные таблицы — разновидность глобальных таблиц. Они так же присутствуют на всех узлах кластера, но используются в служебных целях. Например, в них хранятся данные о всех существующих объектах БД (таблицы, пользователи, роли), а также системные настройки кластера.

См. также: