Física contra lógica
O curso de nível Sênior "Arquitetura de banco de dados: réplicas" descreveu a replicação física. A replicação lógica é um mecanismo diferente, com um propósito diferente, e essa diferença é o assunto inteiro.
O que a replicação física copia
Bytes. O primário grava as mudanças no write-ahead log, e uma réplica física reaplica essas mudanças, byte a byte, sobre uma cópia idêntica dos arquivos de dados.
Isso tem três consequências que vale dizer.
A réplica é uma cópia exata: toda tabela, todo índice, toda linha. Você não consegue replicar só uma parte.
Ela precisa rodar a mesma versão principal do Postgres, porque o formato dos bytes é específico de cada versão.
E ela é somente leitura. Reaplicar o WAL sobre arquivos em que outra coisa também escreve os corromperia.
O que a replicação lógica copia
Mudanças de linha decodificadas. O Postgres lê o mesmo write-ahead log, mas o decodifica em operações lógicas, como "insira esta linha em courses" ou "atualize a linha com esta chave", e envia essas operações.
As três consequências se invertem.
Você escolhe o que replicar: tabelas específicas, e até operações específicas.
As versões podem ser diferentes. Um publicador Postgres 14 pode alimentar um assinante Postgres 17, porque as linhas estão sendo descritas, e não os bytes copiados.
E o assinante é um banco normal, que aceita escrita. Ele tem índices próprios e tabelas extras próprias, e aceita escritas próprias.
flowchart TB
W["o write-ahead log"] --> P["física: reaplica os bytes"]
W --> L["lógica: decodifica em mudanças de linha"]
P --> P1["cópia exata, mesma versão, somente leitura"]
L --> L1["tabelas escolhidas, qualquer versão, assinante gravável"]
A troca
A replicação física é mais barata e mais fiel. Ela usa menos CPU, tem menos coisa para dar errado, e a réplica é garantidamente idêntica.
A replicação lógica é mais flexível e dá mais trabalho. Decodificar custa CPU no publicador, e o assinante pode se desencontrar: ele aceita escritas, então nada garante que os dois concordem, além das mudanças que são enviadas.
Esse desencontro é um recurso, e não um defeito. É ele que permite a um assinante acrescentar índices próprios para relatórios, ter colunas extras ou juntar fluxos de vários publicadores.
Onde esta aplicação está
Nenhuma das duas está configurada, e uma delas não é possível no momento:
wal_level replica
publicações 0
assinaturas 0
slots de replicação 0
O wal_level é replica, e não logical. A replicação física funcionaria hoje. A lógica não pode começar até essa configuração mudar, e mudá-la exige um reinício. A lição 3 trata do que isso custa.
Pontos-chave
- A replicação física reaplica bytes do WAL, e a lógica os decodifica em operações de linha.
- A física dá uma cópia exata e somente leitura na mesma versão principal. A lógica dá tabelas escolhidas em qualquer versão.
- Um assinante lógico é um banco normal que aceita escrita e pode se desencontrar, o que é o ponto, e não uma falha.
- A física é mais barata e mais fiel. A lógica custa CPU para decodificar e abre mão da garantia de que as cópias são idênticas.
- Aqui o
wal_leveléreplica, então a replicação lógica não é possível sem uma mudança de configuração e um reinício.
Continue com a aula 2
Publicações e assinaturas
Apresenta publicações, assinaturas e slots de replicação, e mostra por que o schema nunca é replicado.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.