Основные понятия масштабирования в Azure Cosmos DB для PostgreSQL
Область применения: Azure Cosmos DB для PostgreSQL (на базе расширения базы данных Citus до PostgreSQL)
Прежде чем изучить шаги по созданию нового приложения, рекомендуем ознакомиться с основными терминами и понятиями.
Обзор архитектуры
Azure Cosmos DB для PostgreSQL дает возможность распределять таблицы и схемы между несколькими компьютерами в кластере и прозрачно запрашивать их так же, как и обычный PostgreSQL:
В архитектуре Azure Cosmos DB для PostgreSQL существует несколько типов узлов:
- Узел-координатор хранит метаданные распределенной таблицы и отвечает за распределенное планирование.
- Напротив, рабочие узлы хранят фактические данные, метаданные и выполняют вычисления.
- Координатор и рабочие роли являются обычными базами данных PostgreSQL с загруженным расширением
citus
.
Чтобы распределить обычную таблицу PostgreSQL, как campaigns
на приведенной выше схеме, выполните команду create_distributed_table()
. После выполнения этой команды Azure Cosmos DB для PostgreSQL прозрачно создает сегменты для таблицы на рабочих узлах. На схеме сегменты представлены как синие прямоугольники.
Чтобы распространить обычную схему citus_schema_distribute()
PostgreSQL, выполните команду. После выполнения этой команды Azure Cosmos DB для PostgreSQL прозрачно превращает таблицы в такие схемы в одну группу совместно размещенных таблиц сегментов, которые можно переместить в виде единицы между узлами кластера.
Примечание.
В кластере без рабочих узлов сегменты распределенных таблиц находятся на узле координатора.
Сегменты — это обычные (но специально именованные) таблицы PostgreSQL, в которых хранятся срезы данных. В нашем примере, так как мы распределяем campaigns
по company_id
, сегменты вмещают кампании, причем кампании разных компаний назначаются разным сегментам.
Столбец распределения (также называемый ключом сегмента)
create_distributed_table()
— это магическая функция, которую Azure Cosmos DB для PostgreSQL предоставляет для распространения таблиц и использования ресурсов на нескольких компьютерах.
SELECT create_distributed_table(
'table_name',
'distribution_column');
Второй аргумент выше выбирает столбец из таблицы в качестве столбца распределения. Это может быть любой столбец с собственным типом PostgreSQL (обычно это текст или целое число). Значение столбца распределения определяет, какие строки попадают в сегменты, поэтому столбец распределения также называется ключом сегмента.
Azure Cosmos DB для PostgreSQL решает, как выполнять запросы на основе их использования ключа сегментов:
Запрос включает | Где выполняется |
---|---|
Только один ключ сегмента | На рабочем узле, где хранится сегмент |
Несколько ключей сегмента | Параллельно между несколькими узлами |
Выбор ключа сегментов определяет производительность и масштабируемость приложений.
- Неравномерное распределение данных по ключам сегмента снижает производительность. Например, не выбирайте столбец, для которого одно значение представляет 50 % данных.
- Ключи сегментов с низкой кратностью могут повлиять на масштабируемость. Можно использовать столько сегментов, сколько имеются уникальных значений ключа. Выберите ключ с кратностью в сотнях тысяч.
- Объединение двух больших таблиц с разными ключами сегментов может происходить медленно. Выберите общий ключ сегментов в больших таблицах. Дополнительные сведения о совместном размещении.
Совместное размещение
Еще одна концепция, тесно связанная с ключом сегментов, — совместное размещение. Таблицы, сегментированные по тем же значениям столбцов распределения, размещаются совместно. Сегменты совместно размещенных таблиц хранятся на одних и тех же рабочих узлах.
Ниже приведены две таблицы, сегментированные по одному и тому же ключу — site_id
. Используется совместное размещение.
Azure Cosmos DB для PostgreSQL гарантирует, что строки с соответствующим site_id
значением в обеих таблицах хранятся на одном рабочем узле. Вы увидите, что для обеих таблиц строки с site_id=1
хранятся на рабочем узле 1. Аналогично для идентификаторов других сайтов.
Совместное размещение помогает оптимизировать операции JOIN в этих таблицах. При присоединении к двум таблицам site_id
Azure Cosmos DB для PostgreSQL может выполнять присоединение локально на рабочих узлах без перетасовки данных между узлами.
Таблицы в распределенной схеме всегда распределяются друг с другом.