Compartilhar via


Modelos de fragmentação em clusters elásticos no Banco de Dados do Azure para PostgreSQL

A fragmentação é uma técnica usada em sistemas de banco de dados e computação distribuída para particionar dados horizontalmente 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 Fragmentos. Um fragmento é um subconjunto dos dados que, junto com outros fragmentos, compõe o conjunto de dados completo.

Os clusters elásticos nas instâncias de servidor flexível do Banco de Dados do Azure para PostgreSQL oferecem dois tipos de fragmentação de dados: baseado em linha e baseado em esquema. Cada opção vem com compensações próprias, permitindo que você escolha a abordagem que melhor se alinha aos requisitos do aplicativo.

Fragmentação baseada em linha

As tabelas são fragmentadas em um esquema compartilhado de banco de dados individual, permitindo que locatários coexistam como linhas dentro da mesma tabela. O locatário é determinado pela definição uma coluna de distribuição, que permite dividir uma tabela horizontalmente.

A fragmentação baseada em linhas é o método mais eficiente em termos de hardware. Os locatários são densamente empacotados e distribuídos entre os nós no cluster. No entanto, essa abordagem requer garantir que todas as tabelas no esquema tenham a coluna de distribuição e que todas as consultas no aplicativo sejam filtradas por essa coluna. A fragmentação baseada em linha atua nas cargas de trabalho de IoT e para obter a melhor margem fora do uso de hardware.

Benefícios:

  • Melhor desempenho.
  • Melhor densidade de locatário por nó.

As desvantagens:

  • Requer modificações de esquema.
  • Requer modificações de consulta de aplicativo.
  • Requer que todos os locatários compartilhem o mesmo esquema.

Fragmentação baseada em esquema

A fragmentação baseada em esquema é o banco de dados compartilhado, um modelo de esquema separado, fazendo com que o esquema se torne um fragmento lógico dentro do banco de dados. Os aplicativos multilocatários podem usar um esquema por locatário para fragmentar facilmente ao longo da dimensão do locatário. Não são necessárias alterações nas consultas, e a aplicação precisa apenas de uma pequena modificação para definir o search_path adequado ao alternar entre locatários. A fragmentação baseada em esquema é uma solução ideal para microsserviços e para ISVs (fornecedores independentes de software) que implantam aplicativos que não podem passar pelas alterações necessárias para integrar a fragmentação baseada em linha.

Benefícios:

  • Os locatários podem ter esquemas heterogêneos.
  • Não há necessidade de modificar o esquema.
  • Não é necessário alterar as consultas do aplicativo.
  • A compatibilidade do SQL de fragmentação baseada em esquema é melhor em comparação com a fragmentação baseada em linha.

As desvantagens:

  • Menos locatários por nó em comparação com a fragmentação baseada em linha.

Compensações de fragmentação

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 de locatário
Versão do Citus 12.0+ Todas as versões
Etapas extras em comparação com o vanilla PostgreSQL Nenhum, apenas uma alteração de configuração Usar create_distributed_table em cada tabela para distribuir e colocar tabelas por ID de locatário
Número de locatários 1 a 10 k 1 a 1,5 milhão+
Requisito de modelagem de dados Nenhuma chave estrangeira em esquemas distribuídos Precisa incluir uma coluna de ID de locatário (uma coluna de distribuição, também conhecida como chave de fragmentação) em cada tabela e, nas chaves primárias, chaves estrangeiras
Requisito do SQL para consultas de nó único Usar um único esquema distribuído por consulta As junções e cláusulas WHERE devem incluir a coluna tenant_id
Consultas entre locatários paralelas Não Sim
Definições de tabela personalizada por locatário Sim Não
Controle de acesso Permissões de esquema Permissões de esquema
Compartilhamento de dados entre locatários Sim, usando tabelas de referência (em um esquema separado) Sim, usando tabelas de referência
Locatário para isolamento de fragmentos Cada locatário tem seu próprio grupo de fragmentos por definição Pode fornecer às IDs de locatário específicas seu próprio grupo de fragmentos por meio do isolate_tenant_to_new_shard