Share via


Conceitos fundamentais de dimensionamento no Azure Cosmos DB for PostgreSQL

APLICA-SE AO: Azure Cosmos DB for PostgreSQL (da plataforma da extensão de dados Citus para PostgreSQL)

Antes de investigarmos as etapas de criação de um novo aplicativo, vale a pena obter uma visão geral rápida dos termos e conceitos envolvidos.

Visão geral da arquitetura

O Azure Cosmos DB for PostgreSQL permite distribuir as tabelas e/ou esquemas entre vários computadores em um cluster e consultá-las claramente da mesma forma que você faz uma consulta básica no PostgreSQL:

Diagram of the coordinator node sharding a table onto worker nodes.

Na arquitetura do Azure Cosmos DB for PostgreSQL, há vários tipos de nós:

  • O nó coordenador armazena os metadados da tabela distribuída e é responsável pelo planejamento distribuído.
  • Por outro lado, os nós de trabalho armazenam os dados, metadados reais e fazem a computação.
  • Tanto o nó coordenador quanto os nós de trabalho são bancos de dados básicos PostgreSQL, com a extensão citus carregada.

Para distribuir uma tabela normal PostgreSQL, como campaigns no diagrama acima, execute um comando chamado create_distributed_table(). Depois de executar esse comando, o Azure Cosmos DB for PostgreSQL criará fragmentos de forma transparente para a tabela entre os nós de trabalho. No diagrama, os fragmentos são representados como caixas azuis.

Para distribuir um esquema normal de PostgreSQL, execute o comando citus_schema_distribute(). Depois de executar esse comando, o Azure Cosmos DB for PostgreSQL transforma de forma transparente as tabelas nesses esquemas em tabelas colocalizadas em um único fragmento que pode ser movidas como uma unidade entre os nós do cluster.

Observação

Em um cluster sem nós de trabalho, os fragmentos das tabelas distribuídas estão no nó coordenador.

Os fragmentos são tabelas básicas PostgreSQL (mas especialmente nomeadas) que contêm fatias dos dados. Em nosso exemplo, como distribuímos campaigns por company_id, os fragmentos realizam campanhas, em que as campanhas de diferentes empresas são atribuídas a fragmentos diferentes.

Coluna de distribuição (também conhecida como chave de fragmento)

create_distributed_table() é a função magic que o Azure Cosmos DB for PostgreSQL fornece para distribuir tabelas e usar recursos em vários computadores.

SELECT create_distributed_table(
	'table_name',
	'distribution_column');

O segundo argumento acima escolhe uma coluna da tabela como coluna de distribuição. Pode ser qualquer coluna com um tipo nativo PostgreSQL (e o número inteiro e o texto são mais comuns). O valor da coluna de distribuição determina quais linhas entram em quais fragmentos, por isso a coluna de distribuição também é chamada de chave de fragmento.

O Azure Cosmos DB for PostgreSQL decide como executar as consultas com base no uso da chave de fragmento:

A consulta envolve Onde é executada
apenas uma chave de fragmento no nó de trabalho que contém o fragmento
várias chaves de fragmento paralelizadas em vários nós

A escolha da chave de fragmento determina o desempenho e a escalabilidade dos aplicativos.

  • A distribuição irregular de dados nas chaves de fragmento (também conhecida como distorção de dados) não é ideal para desempenho. Por exemplo, não escolha uma coluna para a qual um único valor representa 50% dos dados.
  • As chaves de fragmento com baixa cardinalidade podem afetar a escalabilidade. Você só pode usar a mesma quantidade de fragmentos e de valores de chave distintos. Escolha uma chave com cardinalidade entre centenas e milhares.
  • A junção de duas tabelas grandes com chaves de fragmentos diferentes pode ser lenta. Escolha uma chave de fragmento comum entre as tabelas grandes. Saiba mais em colocação.

Colocalização

Outro conceito intimamente relacionado à chave de fragmento é a colocação. As tabelas fragmentadas pelos mesmos valores da coluna de distribuição são colocadas – Os fragmentos das tabelas colocadas são armazenados juntos nos mesmos trabalhos.

Veja abaixo duas tabelas fragmentadas pela mesma chave, site_id. Elas são colocadas.

Diagram of tables http_request and http_request_1min colocated by site_id.

O Azure Cosmos DB for PostgreSQL garante que as linhas com um valor correspondente de site_id em ambas as tabelas sejam armazenadas no mesmo nó de trabalho. Você pode observar que, para ambas as tabelas, as linhas com site_id=1 são armazenadas no trabalho 1. Da mesma forma para outras IDs do site.

A colocação ajuda a otimizar a junções nessas tabelas. Se você unir as duas tabelas em site_id, o Azure Cosmos DB for PostgreSQL poderá executar a junção localmente nos nós de trabalho, sem embaralhar os dados entre os nós.

Tabelas dentro de um esquema distribuído são sempre colocalizadas em conjunto.

Próximas etapas