Partilhar via


Modelos de partilha

APLICA-SE A: Azure Cosmos DB para PostgreSQL (alimentado pela extensão de banco de dados Citus para PostgreSQL)

O compartilhamento é uma técnica usada em sistemas de banco de dados e computação distribuída para particionar horizontalmente dados em vários servidores ou nós. Isso envolve dividir um grande banco de dados ou conjunto de dados em partes menores e mais gerenciáveis chamadas Shards. Um fragmento contém um subconjunto dos dados e, juntos, fragmentos formam o conjunto de dados completo.

O Azure Cosmos DB para PostgreSQL oferece dois tipos de fragmentação de dados, ou seja, baseado em linha e em esquema. Cada opção vem com suas próprias compensações de compartilhamento, permitindo que você escolha a abordagem que melhor se alinha com os requisitos do seu aplicativo.

Fragmentação baseada em linha

A maneira tradicional na qual as tabelas de fragmentos do Azure Cosmos DB para PostgreSQL é o banco de dados único, modelo de esquema compartilhado também conhecido como fragmentação baseada em linha, os locatários coexistem como linhas dentro da mesma tabela. O locatário é determinado pela definição de uma coluna de distribuição, que permite dividir uma tabela horizontalmente.

O método à base de linhas é a maneira mais eficiente em termos de hardware para fragmentação. Os locatários são densamente compactados e distribuídos entre os nós no cluster. Essa abordagem, no entanto, requer certificar-se de que todas as tabelas no esquema tenham a coluna de distribuição e que todas as consultas no aplicativo sejam filtradas por ela. A fragmentação baseada em linha brilha em cargas de trabalho de IoT e para alcançar a melhor margem de uso de hardware.

Benefícios:

  • Melhor desempenho
  • Melhor densidade de locatários por nó

Desvantagens:

  • Requer modificações de esquema
  • Requer modificações na consulta do aplicativo
  • Todos os locatários devem compartilhar o mesmo esquema

Fragmentação baseada em esquema

Disponível com o Citus 12.0 no Azure Cosmos DB para PostgreSQL, a fragmentação baseada em esquema é o banco de dados compartilhado, modelo de esquema separado, o esquema se torna o fragmento lógico dentro do banco de dados. Os aplicativos multilocatários podem usar um esquema por locatário para fragmentar facilmente a dimensão do locatário. As alterações de consulta não são necessárias e o aplicativo só precisa de uma pequena modificação para definir a search_path adequada ao mudar de locatário. A fragmentação baseada em esquema é uma solução ideal para microsserviços e para ISVs que implantam aplicativos que não podem sofrer as alterações necessárias para integrar a fragmentação baseada em linha.

Benefícios:

  • Os locatários podem ter esquemas heterogêneos
  • Não são necessárias modificações de esquema
  • Nenhuma modificação de consulta de aplicativo necessária
  • A compatibilidade SQL de fragmentação baseada em esquema é melhor em comparação com a fragmentação baseada em linha

Desvantagens:

  • Menos locatários por nó do que na fragmentação por linhas

Compartilhamento de compensações

Fragmentação baseada em esquema Fragmentação baseada em linha
Modelo de multilocação Esquema separado por locatário Tabelas compartilhadas com colunas de ID do locatário
Versão Citus 12.0+ Todas as versões
Passos extras em comparação com o PostgreSQL padrão Nenhuma, apenas uma alteração de configuração Utilize create_distributed_table em cada tabela para distribuir e colocar em colocalização tabelas de acordo com o ID do locatário.
Número de inquilinos 1-10k 1-1 M+
Requisito de modelagem de dados Sem chaves estrangeiras em esquemas distribuídos É necessário incluir uma coluna de ID do locatário (uma coluna de distribuição, também conhecida como chave de fragmentação) em cada tabela, bem como nas chaves primárias e chaves estrangeiras.
Requisito SQL em consultas de nó singular Usar um único esquema distribuído por consulta As cláusulas JOIN e WHERE devem incluir a coluna tenant_id
Consultas paralelas entre locatários Não Sim
Definições de tabela personalizadas por locatário Sim Não
Controlo de acesso Permissões de esquema Permissões de esquema
Partilha de dados entre inquilinos Sim, usando tabelas de referência (em um esquema separado) Sim, usando tabelas de referência
Inquilino para isolamento de estilhaços Cada inquilino tem o seu próprio grupo de shards por definição. Pode atribuir IDs de locatário específicos ao seu próprio grupo de shards através de isolate_tenant_to_new_shard