Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A ramificação no Lakebase permite que você faça a versão, teste e evolua seu ambiente de dados com segurança, semelhante à ramificação do código no Git. Você pode criar ramificações 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 padrão, o Lakebase cria um único production branch quando você cria um novo projeto. Esse é o branch padrão, destinado a abrigar os dados de produção do aplicativo.
Você pode criar ramificações adicionais conforme necessário para ajustar seu fluxo de trabalho. Por exemplo, adicione uma ramificação development para criação e teste, uma ramificação staging para teste de pré-produção, ou crie ramificações por desenvolvedor para isolamento completo. Cada ramificação opera de forma independente, as alterações em uma criança nunca afetam seu pai. Com a redefinição de ramificação, você pode atualizar qualquer ramificação filha a partir do pai para obter o esquema e os dados mais recentes, sem propagação de dados ou scripts de desativação.
Como funcionam as ramificações
Relações pai-filho
Cada ramificação (exceto a ramificação raiz) tem um 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 oferece isolamento importante: as alterações feitas em uma ramificação filha não afetam a ramificação pai, e as alterações em uma ramificação pai não aparecem automaticamente nas filhas. Esse isolamento também se estende ao estado de funções no Postgres e a bancos de dados — funções e bancos de dados criados, GRANTs e REVOKEs aplicados, e atributos de funções alterados em uma ramificação não têm efeito sobre outras ramificações. Quando precisar de dados atualizados do pai, você poderá redefinir a ramificação filha. Você também pode criar ramificações de qualquer ponto no histórico do pai. Isso é útil para recuperações pontuais, testes em dados históricos ou cenários de conformidade.
Ao criar um branch, você escolhe se deseja inicializá-lo dos dados atuais ou de um ponto específico no tempo. Consulte Criar um branch 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 de cópia-na-gravação para tornar a ramificação pai-filho eficiente. Quando você cria uma nova ramificação, ela herda tanto o esquema quanto os dados de seu pai, mas compartilha o armazenamento subjacente por meio de ponteiros para os mesmos dados. Somente quando você modifica dados, o Lakebase grava novos dados. Isso significa:
- Suas ramificações aparecem instantaneamente; o tamanho do banco de dados não interfere no tempo de criação de ramificações.
- Você paga apenas pelos dados que realmente mudam entre branches
- A criação de branches não tem nenhum impacto no desempenho na carga de trabalho de produção
production branch child branch (at creation)
┌─────────────────┐ ┌─────────────────┐
│ [Data A] │◄──────│ → Data A │ (shared)
│ [Data B] │◄──────│ → Data B │ (shared)
│ [Data C] │◄──────│ → Data C │ (shared)
└─────────────────┘ └─────────────────┘
After modifying data in child branch:
┌─────────────────┐ ┌─────────────────┐
│ [Data A] │◄──────│ → Data A │ (shared)
│ [Data B] │ │ [Data B'] │ (changed)
│ [Data C] │◄──────│ → Data C │ (shared)
└─────────────────┘ └─────────────────┘
Only changed data is stored separately
Trabalhar com ramificações
Redefinição de ramo
A redefinição de ramificação atualiza instantaneamente uma ramificação filha para coincidir com o estado atual do pai. Isso é útil quando você deseja atualizar sua ramificação de desenvolvimento ou preparo com os dados mais recentes do pai. A operação é concluída instantaneamente usando a tecnologia copy-on-write e os detalhes da conexão permanecem os mesmos.
A redefinição de ramificação só funciona em uma direção (pai → filho). Para mover alterações de filho para pai, use suas ferramentas de migração padrão para aplicar alterações de esquema. Consulte Redefinir um branch para obter etapas e cenários detalhados.
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 se recuperar de erros de dados, como exclusões acidentais, investigar problemas passados ou acessar dados históricos para fins de auditoria e conformidade. Por exemplo, se uma tabela crítica tiver sido descartada ontem às 10h23, você poderá criar um branch definido como 10h22 para extrair os dados ausentes. Da mesma forma, você pode criar branches que reflitam o estado do banco de dados em datas específicas para reconciliações financeiras, auditorias regulatórias ou análise forense. Diferente da redefinição de ramificação (que atualiza uma ramificação existente no local), a recuperação pontual cria uma nova ramificação raiz a partir de dados históricos, deixando sua ramificação original inalterada e operacional. Confira Recuperação pontual para obter detalhes.
Tipos de ramificação especiais
Ramificação padrão
Cada projeto do Lakebase é criado com um branch padrão chamado production, mas você pode designar qualquer branch como o padrão. O branch padrão é isento do limite de computação simultaneamente ativo, garantindo que ele permaneça disponível o tempo todo.
Ramificações protegidas
As ramificações protegidas têm medidas de segurança para evitar alterações acidentais. Elas não podem ser excluídas ou redefinidas a partir do pai e estão isentas do arquivamento automático devido à inatividade. As ramificações protegidas também bloqueiam a exclusão do projeto enquanto estiverem ativas, assegurando que você não consiga remover acidentalmente a infraestrutura crítica. Além disso, o Lakebase prioriza, em seu cache de armazenamento, os dados de branches protegidos, favorecendo o desempenho dessas branches em detrimento de outras branches. Cada projeto oferece suporte a uma ramificação protegida. Use ramificações protegidas para dados essenciais, como produção. Consulte branches protegidas para obter detalhes.
Como a ramificação afeta o consumo de recursos
Com ramificações, você paga apenas pelo que realmente usa.
Armazenamento: você paga apenas pelos dados que são alterados. Se você criar um branch de desenvolvimento e modificar 1 GB de dados em um banco de dados de 100 GB, pagará aproximadamente 1 GB de armazenamento, não 200 GB. Os 99 GB inalterados são compartilhados entre branches.
Computação: cada ramificação tem sua própria computação que pode ser dimensionada de forma independente. Você paga apenas pelas horas de computação ativas. Calcula a escala para zero quando ocioso. Isso significa que um branch de desenvolvimento que você usa ocasionalmente custa muito menos do que executar um servidor de desenvolvimento dedicado 24/7.
Estratégias de ramificação
Aqui estão algumas maneiras comuns de as equipes organizarem seus branches:
Simples (indivíduos e equipes pequenas)
Use sua ramificação padrão com uma única ramificação de desenvolvimento:
production
└── development
Sua development ramificação é onde você cria novos recursos com segurança. Você pode fazer alterações de esquema, adicionar dados de teste e testar sem risco para a ramificação de produção. Quando estiver pronto, execute as migrações de esquema que foram testadas em production (usando sua ferramenta de migração) e então redefina development para começar o próximo recurso com dados novos.
Com preparo
Adicione uma ramificação de preparo para testes 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 da sua ramificação de produção. Implante seu aplicativo lá, execute testes de integração e desempenho em dados realistas e ganhe confiança antes de entrar em operação. Redefina periodicamente staging do production para atualizar seus dados de teste.
Branches por desenvolvedor
Cada desenvolvedor trabalha em isolamento completo:
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 outras pessoas e, quando estiver pronto, aplicar migrações testadas ao branch compartilhado development ou production.
Recursos adicionais
- Gerenciar branches para saber como criar, redefinir e excluir branches
- Branches protegidos para proteger branches críticos