Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:
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 может выполнять соединение локально на рабочих узлах без перетасовки данных между узлами.
Таблицы в распределенной схеме всегда колокацированы друг рядом с другом.