Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Это важно
Azure Cosmos DB для PostgreSQL больше не поддерживается для новых проектов. Не используйте эту службу для новых проектов. Вместо этого используйте одну из этих двух служб:
Используйте Azure Cosmos DB для NoSQL как распределенное решение базы данных, предназначенное для крупномасштабных сценариев с соглашением об уровне доступности (SLA) 99.999%, мгновенным автомасштабированием и автоматическим переключением в случае отказа в нескольких регионах.
Используйте функцию эластичных кластеров Базы данных Azure для PostgreSQL для сегментированного PostgreSQL с помощью расширения Citus с открытым кодом.
Прежде чем изучить шаги по созданию нового приложения, рекомендуем ознакомиться с основными терминами и понятиями.
Обзор архитектуры
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 может выполнять соединение локально на рабочих узлах без перетасовки данных между узлами.
Таблицы в распределенной схеме всегда колокацированы друг рядом с другом.