Aller au contenu principal

Branch

Le branching dans Lakebase vous permet de gérer les versions, tester et faire évoluer votre environnement de données en toute sécurité, de manière similaire au branching de votre code dans Git. Vous pouvez créer instantanément des branches isolées et entièrement fonctionnelles pour le développement, l'expérimentation ou le test des modifications de schéma, sans impacter les charges de travail de production.

Par default, Lakebase crée une seule branch production lorsque vous créez un nouveau projet. Ceci est votre default branch, destinée à héberger les données de production de votre application.

Vous pouvez créer des Branch supplémentaires selon vos besoins pour s'adapter à votre workflow. Par exemple, ajoutez une Branch development pour la création et les tests, une Branch staging pour les tests de pré-production, ou créez des Branches par développeur pour une isolation complète. Chaque Branch fonctionne indépendamment — les modifications dans une Branch enfant n'affectent jamais sa Branch parent. Avec la Reset de Branch, vous pouvez refresh n'importe quelle Branch enfant à partir de sa Branch parente pour obtenir le dernier schéma et les données les plus récentes, sans scripts d'amorçage ou de suppression de données.

Fonctionnement des branches

Relations parent-enfant

Chaque Branch (sauf la Branch racine) a un parent. Ceci crée une hiérarchie :

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

Cette hiérarchie vous offre une isolation importante : les modifications que vous apportez à une Branch enfant n'affectent pas son parent, et les modifications apportées à un parent n'apparaissent pas automatiquement chez les enfants. Cette isolation s'étend également à l'état des rôles et des bases de données Postgres — les rôles et les bases de données créés, les GRANTs et les REVOKEs appliqués, ainsi que les attributs de rôle modifiés sur une Branch n'ont aucun effet sur les autres Branch. Lorsque vous avez besoin de données mises à jour du parent, vous pouvez Reset la Branch enfant. Vous pouvez également créer des Branch à partir de n'importe quel point de l'historique du parent, ce qui est utile pour la récupération à un point spécifique, les tests sur des données historiques ou les scénarios de conformité.

Lorsque vous créez une Branch, vous choisissez de l'initialiser à partir des données actuelles ou d'un point spécifique dans le temps. Consultez Créer une branch pour obtenir des instructions pas à pas et des détails sur chaque option.

Stockage Copy-on-write

Lakebase utilise la technologie de copie sur écriture pour rendre le branchement parent-enfant efficace. Lorsque vous créez une nouvelle Branch, elle hérite à la fois du schéma et des données de son parent, mais partage le stockage sous-jacent par le biais de pointeurs vers les mêmes données. Ce n'est que lorsque vous modifiez des données que Lakebase écrit de nouvelles données. Cela signifie :

  • Vos branches apparaissent instantanément ; la taille de votre base de données n'a aucune incidence sur le temps de création de Branch.
  • Vous ne payez que pour les données qui changent réellement entre les branches
  • La création de Branch n’a pas d’impact sur les performances de votre charge de travail de production.
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

Utilisation des branches

Branch Reset

La Reset de la Branch met à jour instantanément une Branch enfant pour qu'elle corresponde à l'état actuel de son parent. Ceci est utile lorsque vous souhaitez refresh votre Branch de développement ou de pré-production avec les dernières données de sa Branch parente. L'opération se termine instantanément en utilisant la technologie de copie sur écriture, et vos informations de connexion restent les mêmes.

La Reset de la Branch ne fonctionne que dans un sens (parent → enfant). Pour déplacer les modifications de l'enfant au parent, utilisez vos outils de migration standards pour appliquer les modifications de schéma. Consultez Reset a Branch pour les étapes détaillées et les scénarios.

Restauration à un instant T

Vous pouvez créer une branch à partir d'un point précis dans le temps au sein de votre fenêtre de restauration, ce qui est utile pour récupérer des erreurs de données comme les suppressions accidentelles, enquêter sur des problèmes passés ou accéder aux données historiques à des fins d'audit et de conformité. Par exemple, si une table critique a été supprimée hier à 10 h 23, vous pouvez créer une branch réglée sur 10 h 22 pour extraire les données manquantes. De même, vous pouvez créer des branches reflétant l'état de votre base de données à des dates spécifiques pour les rapprochements financiers, les audits réglementaires ou les analyses forensiques. Contrairement à la réinitialisation de Branch (qui met à jour une Branch existante sur place), la récupération ponctuelle crée une nouvelle Branch racine à partir de données historiques, tout en laissant votre Branch d'origine inchangée et opérationnelle. Consultez Restauration à un instant T pour plus de détails.

Types de Branch spéciaux

Branch default

Chaque projet Lakebase est créé avec une branch appelée production, mais vous pouvez désigner n'importe quelle branch comme default. La Branch default est exempte de la limite de compute actifs simultanément, garantissant ainsi qu'elle reste disponible à tout moment.

Branch protégées

Les branches protégées sont dotées de mesures de protection pour prévenir les modifications accidentelles. Elles ne peuvent pas être supprimées ou Reset depuis leur parent, et elles sont exemptes d'archivage automatique en raison d'inactivité. Les Branch protégées empêchent également la suppression de projets tant qu'elles existent, ce qui garantit que vous ne pouvez pas supprimer accidentellement une infrastructure critique. En outre, Lakebase donne la priorité aux données des Branch protégées dans son cache de stockage, privilégiant les performances des Branch protégées par rapport aux autres Branch. Chaque projet prend en charge une Branch protégée. Utilisez des branches protégées pour les données critiques, comme celles de production. Consultez les Branch protégées pour plus de détails.

Branch de récupération

Lakebase dispose d’un type de Branch spécial appelé « branch de récupération » qui est propre à la reprise après sinistre. En cas d’utilisation de la reprise après sinistre, si vous Trigger un basculement et que des transactions validées n’ont pas encore été répliquées vers un serveur secondaire, Lakebase conserve ces transactions non répliquées sous forme de branch de récupération une fois que le serveur principal d’origine est de nouveau en ligne. La Branch de récupération vous permet d’inspecter et de rapprocher les transactions de vos autres Branch. Cette fonctionnalité vous aide à prévenir les scénarios de « perte de données silencieuse ». Lakebase conserve les branches de récupération : vous devez les supprimer explicitement lorsque vous avez terminé. Reportez-vous à la reprise après sinistre pour plus de détails.

Impact de la création de branches sur la consommation de ressources

Avec les branches, vous ne payez que ce que vous utilisez réellement.

Stockage : Vous ne payez que pour les données qui changent. Si vous créez une Branch de développement et modifiez 1 Go de données dans une base de données de 100 Go, vous payez pour environ 1 Go de stockage, et non 200 Go. Les 99 Go inchangés sont partagés entre les branches.

Compute : chaque Branch a son propre compute que vous pouvez faire monter en charge de manière indépendante. Vous ne payez que pour les heures de compute actives. Les computes se désactivent lorsqu'ils sont inactifs. Cela signifie qu'une branch de développement que vous utilisez occasionnellement coûte bien moins cher que de faire fonctionner un serveur de développement dédié 24h/24 et 7j/7.

Branch strategies

Voici quelques façons courantes dont les équipes organisent leurs Branch :

Simple (individus et petites équipes)

Utilisez votre default Branch avec une seule development Branch :

production
└── development

Votre Branch development est l'endroit où vous développez de nouvelles fonctionnalités en toute sécurité. Vous pouvez effectuer des modifications de schéma, ajouter des données de test et expérimenter sans aucun risque pour votre Branch de production. Lorsque vous êtes prêt, exécutez vos migrations de schéma testées contre production (à l'aide de votre outil de migration), puis Reset development pour start la fonctionnalité suivante avec des données actualisées.

Avec l'étape

Ajoutez une branch de staging pour les tests de préproduction :

production
├── staging
└── development

Si vous avez besoin de tests de pré-production, maintenez une Branch staging qui reflète les données de votre Branch de production. Déployez votre application, exécutez des tests d'intégration et de performance sur des données réalistes, et prenez confiance avant la mise en production. Periodically reset staging from production to refresh vos données de test.

Branch par développeur

Chaque développeur travaille en toute isolation :

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

Ce modèle empêche les développeurs d'interférer avec le travail des uns et des autres et permet à chacun de tester les modifications de schéma indépendamment. Chaque développeur peut expérimenter ses propres modifications de schéma et de données sans affecter les autres, puis appliquer les migrations testées à la Branch partagée development ou production lorsqu'il est prêt.

Ressources supplémentaires