Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Importante
O Azure Cosmos DB para PostgreSQL não tem mais suporte para novos projetos. Não use este serviço para novos projetos. Em vez disso, use um destes dois serviços:
Use o Azure Cosmos DB para NoSQL para obter uma solução de banco de dados distribuído projetada para cenários de alta escala com um SLA (contrato de nível de serviço) de disponibilidade de 99.999%, dimensionamento automático instantâneo e failover automático em várias regiões.
Use a funcionalidade de Clusters Elásticos do Azure para PostgreSQL para PostgreSQL fragmentado, utilizando a extensão Citus de código aberto.
Antes de investigarmos as etapas de criação de um novo aplicativo, é útil ver uma rápida visão geral dos termos e conceitos envolvidos.
Descrição geral da arquitetura
O Azure Cosmos DB para PostgreSQL oferece o poder de distribuir tabelas e/ou esquemas em várias máquinas em um cluster e consultá-los de forma transparente da mesma forma que você consulta PostgreSQL simples:
Na arquitetura do Azure Cosmos DB para PostgreSQL, há vários tipos de nós:
- O nó coordenador armazena metadados de tabelas distribuídas e é responsável pelo planeamento distribuído.
- Por outro lado, os nós de trabalho armazenam os dados reais, metadados e fazem o cálculo.
- Tanto o coordenador como os trabalhadores são bases de dados PostgreSQL padrão, com a extensão
cituscarregada.
Para distribuir uma tabela PostgreSQL normal, como campaigns no diagrama acima, execute um comando chamado create_distributed_table(). Depois de executar esse comando, o Azure Cosmos DB para PostgreSQL cria fragmentos transparentes para a tabela nos nós de trabalho. No diagrama, os fragmentos são representados como caixas azuis.
Para distribuir um esquema PostgreSQL normal, execute o citus_schema_distribute() comando. Depois de executar esse comando, o Azure Cosmos DB para PostgreSQL transforma de forma transparente as tabelas nesses esquemas em tabelas colocalizadas de fragmento único que podem ser movidas como uma unidade entre nós do cluster.
Nota
Em um cluster sem nós de trabalho, fragmentos de tabelas distribuídas estão no nó coordenador.
Os fragmentos são tabelas PostgreSQL simples (mas especialmente nomeadas) que contêm fatias dos seus dados. No nosso exemplo, porque distribuímos campaigns por company_id, os shards contêm as campanhas, sendo que as campanhas de diferentes empresas são atribuídas a diferentes fragmentos.
Coluna de distribuição (também conhecida como chave de fragmento)
create_distributed_table() é a função mágica que o Azure Cosmos DB para PostgreSQL fornece para distribuir tabelas e usar recursos em várias máquinas.
SELECT create_distributed_table(
'table_name',
'distribution_column');
O segundo argumento acima escolhe uma coluna da tabela como uma coluna de distribuição. Pode ser qualquer coluna com um tipo PostgreSQL nativo (com inteiro e texto sendo mais comuns). O valor da coluna de distribuição determina quais linhas entram em quais fragmentos, razão pela qual a coluna de distribuição também é chamada de chave de fragmentação.
O Azure Cosmos DB para PostgreSQL decide como executar consultas com base no uso da chave de fragmento.
| A consulta envolve | Onde corre |
|---|---|
| apenas uma chave de fragmento | no nó de trabalho que mantém o estilhaço |
| várias teclas de estilhaços | paralelizado em vários nós |
A escolha da chave de estilhaço dita o desempenho e a escalabilidade das suas aplicações.
- A distribuição desigual de dados por chaves de estilhaço (também conhecida como distorção de dados) não é ideal para o desempenho. Por exemplo, não escolha uma coluna para a qual um único valor represente 50% dos dados.
- Chaves de estilhaço com baixa cardinalidade podem afetar a escalabilidade. Você pode usar apenas quantos fragmentos houver valores de chave distintos. Escolha uma chave com cardinalidade entre centenas e milhares.
- Juntar duas grandes tabelas com diferentes chaves de fragmentação pode ser lento. Escolha uma chave de partição comum em tabelas grandes. Saiba mais em colocation.
Colocalização
Outro conceito intimamente relacionado com a chave de estilhaço é o colocation. As tabelas fragmentadas pelos mesmos valores de coluna de distribuição são alocadas juntas - Os fragmentos das tabelas alocadas juntas são armazenados juntos nos mesmos nós de processamento.
Abaixo estão duas tabelas fragmentadas pela mesma chave, site_id. Eles estão localizados no mesmo lugar.
O Azure Cosmos DB para PostgreSQL garante que as linhas com um valor correspondente site_id em ambas as tabelas sejam armazenadas no mesmo nó de trabalho. Você pode ver que, para ambas as tabelas, as linhas com site_id=1 são armazenadas no processo 1. Da mesma forma para outros IDs de site.
O colocation ajuda a otimizar as JOINs nessas tabelas. Se unir as duas tabelas no site_id, o Azure Cosmos DB para PostgreSQL pode efetuar a junção localmente em nós de trabalho sem trocar dados entre nós.
As tabelas dentro de um esquema distribuído estão sempre localizadas no mesmo local.