Física contra lógica

Prévia grátis 3 min de leitura

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.
Aula 1 de 7 · grátis

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.

Digite para buscar...