Pular para o conteúdo principal

Ramos do banco de dados

info

Beta

O Lakebase Postgres (beta com escalonamento automático) é a próxima versão do Lakebase, disponível apenas para avaliação. Para cargas de trabalho de produção, utilize a versão de pré-visualização pública do Lakebase. Consulte a seção "Como escolher entre as versões" para entender qual versão é a mais adequada para você.

O recurso de ramificação de banco de dados no Lakebase permite versionar, testar e evoluir seu ambiente de dados com segurança, de forma semelhante à ramificação de seu código no Git. Você pode criar instantaneamente ramificações de banco de dados isoladas e totalmente funcionais para desenvolvimento, experimentação ou teste de alterações de esquema, sem afetar as cargas de trabalho de produção.

Por default, o Lakebase cria duas ramificações quando você cria um novo projeto:

production (default branch)
└── development (child branch)

O branch production é o seu branch raiz, destinado a armazenar os dados de produção da sua aplicação. O ramo development é um filho de production, fornecendo um ambiente pronto para uso para construção e teste. Com o Reset de ramificação, você pode refresh development a partir de production instantaneamente para obter o esquema e os dados mais recentes, sem scripts de seeding ou teardown de dados.

Você pode criar ramificações adicionais conforme necessário para adequá-las ao seu fluxo de trabalho. Por exemplo, adicione uma ramificação staging para testes de pré-produção ou crie ramificações por desenvolvedor para isolamento completo. Cada ramo opera de forma independente — mudanças em um ramo filho nunca afetam seu ramo pai.

Como funcionam as ramificações do banco de dados

Relações entre pais e filhos

Cada ramo (exceto o ramo raiz) tem um ramo pai. Isso cria uma hierarquia:

production (root branch)
├── staging (child of production)
│ └── feature-test (child of staging)
└── development (child of production)
└── bugfix-branch (child of development)

Essa hierarquia proporciona um isolamento importante: as alterações feitas em um ramo filho não afetam seu ramo pai, e as alterações feitas em um ramo pai não aparecem automaticamente nos ramos filhos. Quando precisar de dados atualizados do ramo pai, você pode redefinir o ramo filho. Você também pode criar ramificações a partir de qualquer ponto no histórico do nó pai, o que é útil para recuperação pontual, testes com base em dados históricos ou cenários compliance .

Ao criar uma ramificação, você escolhe se deseja inicializá-la a partir dos dados atuais ou de um ponto específico no tempo. Consulte Criar uma ramificação para obter instruções passo a passo e detalhes sobre cada opção.

Armazenamento de cópia em gravação

O Lakebase utiliza a tecnologia copy-on-write para tornar o ramificação pai-filho eficiente. Ao criar uma nova ramificação, ela herda tanto o esquema quanto os dados de sua ramificação pai, mas compartilha o armazenamento subjacente por meio de ponteiros para os mesmos dados. O Lakebase só grava novos dados quando você modifica os dados. Isso significa:

  • Suas ramificações aparecem instantaneamente; o tamanho do seu banco de dados não tem impacto no tempo de criação das ramificações.
  • Você só paga pelos dados que realmente mudam entre as filiais.
  • A criação de branches não afeta o desempenho da sua carga de trabalho de produção.
production branch          development branch (at creation)
┌─────────────────┐ ┌─────────────────┐
│ [Data A] │◄──────│ → Data A │ (shared)
│ [Data B] │◄──────│ → Data B │ (shared)
│ [Data C] │◄──────│ → Data C │ (shared)
└─────────────────┘ └─────────────────┘

After modifying data in development:
┌─────────────────┐ ┌─────────────────┐
│ [Data A] │◄──────│ → Data A │ (shared)
│ [Data B] │ │ [Data B'] │ (changed)
│ [Data C] │◄──────│ → Data C │ (shared)
└─────────────────┘ └─────────────────┘
Only changed data is stored separately

Trabalhando com filiais

Reinicialização de ramificação

A redefinição de ramificação atualiza instantaneamente uma ramificação filha para corresponder ao estado atual de sua ramificação pai. Isso é útil quando você deseja refresh seu branch de desenvolvimento ou de teste com os dados de produção mais recentes. A operação é concluída instantaneamente usando a tecnologia copy-on-write, e seus dados de conexão permanecem os mesmos.

O Branch Reset funciona apenas em uma direção (pai → filho). Para transferir alterações do esquema filho para o esquema pai, utilize suas ferramentas de migração padrão para aplicar as alterações de esquema. Consulte a seçãoReset uma ramificação" para obter instruções detalhadas sobre os passos e cenários.

Recuperação pontual

Você pode criar uma ramificação a partir de um ponto específico no tempo dentro da sua janela de restauração, o que é útil para recuperar dados de erros como exclusões acidentais, investigar problemas antigos ou acessar dados históricos para fins de auditoria e compliance . Por exemplo, se uma tabela crítica foi excluída ontem às 10h23, você pode criar uma ramificação definida para as 10h22 para extrair os dados ausentes. Da mesma forma, você pode criar ramificações que reflitam o estado do seu banco de dados em datas específicas para conciliações financeiras, auditorias regulatórias ou análises forenses. Ao contrário da redefinição de branch (que atualiza um branch existente), a recuperação pontual cria um novo branch a partir de dados históricos. Consulte a seção Restauração pontual para obter detalhes.

Tipos de ramos especiais

ramo padrão

Ao criar um projeto Lakebase, você obtém automaticamente duas ramificações: production (a ramificação default ) e development (uma ramificação filha da produção). Ambos começam vazios, prontos para receber seus dados. Esta configuração fornece um fluxo de trabalho seguro para começar — teste suas alterações de esquema em development, depois execute as mesmas migrações em production quando você tiver certeza de que elas funcionam.

Seu branch default nunca escala para zero, garantindo que ele permaneça disponível mesmo quando o poder computacional de outros branches diminui durante períodos de parado.

Ramos protegidos

Os ramos protegidos possuem mecanismos de segurança para evitar alterações acidentais. Eles não podem ser excluídos ou redefinidos a partir de sua conta principal e estão isentos de arquivamento automático devido à inatividade. Os branches protegidos também impedem a exclusão do projeto enquanto estiverem ativos, garantindo que você não remova acidentalmente infraestruturas críticas. Utilize branches protegidas para dados críticos, como os de produção. Consulte a seção Ramos protegidos para obter mais detalhes.

Como o ramificação impacta o consumo de recursos

Com o sistema de ramificação de banco de dados, você paga apenas pelo que realmente usa.

Armazenamento : Você paga apenas pelos dados que são alterados. Se você criar uma ramificação de desenvolvimento e modificar 1 GB de dados em um banco de dados de 100 GB, você pagará por aproximadamente 1 GB de armazenamento, e não por 200 GB. Os 99 GB inalterados são compartilhados entre as filiais.

Computação : Cada filial possui seu próprio compute , que pode ser escalado independentemente. Você paga apenas pelas horas compute ativa. calcule a escala para zero quando parar. Isso significa que uma ramificação de desenvolvimento que você usa ocasionalmente custa muito menos do que manter um servidor de desenvolvimento dedicado em funcionamento 24 horas por dia, 7 dias por semana.

Ramificação padrão : compute da sua ramificação default nunca chega a zero, garantindo que sua carga de trabalho de produção permaneça disponível.

Estratégias de filial

Aqui estão algumas maneiras comuns pelas quais as equipes organizam suas filiais:

Simples (indivíduos e pequenas equipes)

Utilize seus branches default para todo o trabalho:

production
└── development

Seu branch development é onde você cria novos recursos com segurança. Você pode fazer alterações no esquema, adicionar dados de teste e experimentar sem qualquer risco para a produção. Quando estiver pronto, execute suas migrações de esquema testadas em production (usando sua ferramenta de migração) e, em seguida, reinicie development para iniciar o próximo recurso com dados novos.

Com encenação

Adicione uma branch de teste para ambientes de pré-produção:

production
├── staging
└── development

Se você precisar de testes de pré-produção, mantenha uma ramificação staging que espelhe os dados de produção. Implante sua aplicação lá, execute testes de integração e desempenho com dados realistas e ganhe confiança antes de entrar em produção. Reinicie periodicamente staging a partir de production para refresh seus dados de teste.

Ramificações por desenvolvedor

Cada desenvolvedor trabalha em completo isolamento:

production
└── development
├── dev-alice
├── dev-bob
└── dev-charlie

Esse padrão impede que os desenvolvedores interfiram no trabalho uns dos outros e permite que todos testem as alterações de esquema de forma independente. Cada desenvolvedor pode experimentar suas próprias alterações de esquema e modificações de dados sem afetar os outros, e então aplicar as migrações testadas ao branch compartilhado development ou production quando estiverem prontas.

Próximos passos