重要
Lakebase 自动缩放在以下区域处于 Beta 版本:eastus2,westeurope,westus。
Lakebase 自动缩放是最新版本的 Lakebase,可自动缩放计算、缩放到零、分支和即时还原。 有关 与 Lakebase 预配的功能比较,请参阅 在版本之间进行选择。
通过 Lakebase 中的分支,可以安全地对数据环境进行版本控制、测试和改进,类似于在 Git 中对代码进行分支。 可以立即创建独立、功能齐全的分支,以便进行开发、试验或测试架构更改,而不会影响生产工作负荷。
默认情况下,在创建新项目时,Lakebase 会创建单个 production 分支。 这是默认分支,用于容纳应用程序的生产数据。
可以根据需要创建其他分支来适应工作流。 例如,添加用于构建和测试的development分支、用于预生产测试的staging分支,或者为每个开发人员创建分支以实现完全隔离。 每个分支独立运行——子节点中的更改永远不会影响其父节点。 通过分支重置,可以从其父级刷新任何子分支以获取到最新的架构和数据,无需数据填充或清理脚本。
分支的工作原理
父子关系
每个分支(根分支除外)都有一个父分支。 这会创建层次结构:
production (root branch)
├── staging (child of production)
│ └── feature-test (child of staging)
└── development (child of production)
└── bugfix-branch (child of development)
此层次结构提供重要的隔离:对子级所做的更改不会影响其父级,对父级所做的更改不会自动反映在子级中。 当你需要来自父级的更新数据时,可能需要重置子分支。 还可以从父历史记录中的任何时间点创建分支,这对于时点恢复、针对历史数据进行测试或合规场景非常有用。
创建分支时,可以选择是从当前数据还是从特定时间点初始化它。 有关每个选项的分步说明和详细信息,请参阅 “创建分支 ”。
写入时复制存储
Lakebase 使用写入复制技术使父子分支高效。 创建新分支时,它会从其父级继承架构和数据,但通过指向相同数据的指针共享基础存储。 仅当修改数据时,Lakebase 才会写入新数据。 这意味着:
- 分支立即显示;数据库的大小不会影响分支创建时间
- 您只需为分支之间实际更改的数据付费。
- 创建分支对生产工作负荷没有性能影响
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
使用分支
分支重置
分支重置会立即更新子分支以匹配其父分支的当前状态。 当您想要从其父级分支同步最新数据以刷新开发或暂存分支时,这非常有用。 使用写入时复制技术,该操作立即完成,连接详细信息保持不变。
分支重置仅在一个方向生效(父→子级)。 若要将更改从子级移动到父级,请使用标准迁移工具应用架构更改。 有关详细步骤和方案,请参阅 “重置分支 ”。
时间点还原
可以从还原窗口中的特定时间点创建分支,这对于从数据错误(如意外删除、调查过去问题或访问历史数据以进行审核和合规性)进行恢复非常有用。 例如,如果昨天上午 10:23 删除了关键表,则可以创建一个设置为上午 10:22 的分支来提取缺失的数据。 同样,可以在财务对帐、监管审核或取证分析的特定日期创建反映数据库状态的分支。 与分支重置(用于就地更新现有分支)不同,时间点恢复从历史数据创建新的根分支,同时使原始分支保持不变且可正常运行。 有关详细信息,请参阅 时间点还原 。
特殊分支类型
默认分支
创建 Lakebase 项目时,会自动获取单个 production 分支作为默认分支。 起始为空,准备好接收数据。 可以创建用于开发和测试的次级分支,在次级分支中测试架构更改,然后在确认它们正常工作时在 production 上运行相同的迁移。
始终可用,即使其他分支在空闲期间缩减计算资源,默认分支也不会缩减至零。
受保护的分支
受保护的分支具有防止意外更改的安全措施。 它们无法从其父级中删除或重置,并且由于不活动而免于自动存档。 受保护的分支也会在项目存在时阻止删除项目,确保不能意外删除关键基础结构。 对关键数据(如生产)使用受保护的分支。 有关详细信息,请参阅 受保护的分支 。
分支如何影响资源消耗
使用分支功能时,只需为实际使用的内容付费。
存储:您只需为发生变化的数据付费。 如果在 100GB 数据库中创建开发分支并修改 1GB 的数据,则需支付大约 1GB 的存储费用,而不是 200GB。 未更改的 99GB 在分支之间共享。
计算:每个分支都有其自己的计算资源,可以独立扩展。 只需为活动计算时间付费。 空闲时将规模计算为零。 这意味着你偶尔使用的开发分支的成本远远低于运行专用开发服务器 24/7。
默认分支:默认分支计算永远不会缩放到零,确保生产工作负荷保持可用。
分支策略
下面是团队组织其分支的一些常见方法:
简单(个人和小团队)
将默认分支与单个开发分支配合使用:
production
└── development
您的 development 分支是您可以在其中安全构建新功能的地方。 可以进行架构更改、添加测试数据和试验,而不会对生产分支造成任何风险。 准备就绪后,使用迁移工具在 production 上运行已测试的架构迁移,然后重置 development 以新数据启动下一个功能。
使用预备环境
添加用于预生产测试的暂存分支:
production
├── staging
└── development
如果需要预生产测试,请维护一个与生产分支数据同步的 staging 分支。 将应用程序部署到那里,针对实际数据运行集成和性能测试,并在上线之前获得信心。 定期重置stagingproduction以刷新测试数据。
为每个开发人员设置的分支
每个开发人员完全隔离地工作:
production
└── development
├── dev-alice
├── dev-bob
└── dev-charlie
此模式可防止开发人员干扰彼此的工作,并允许每个人都独立测试架构更改。 每个开发人员都可以试验自己的架构更改和数据修改,而不会影响其他人,然后在准备好时将经过测试的迁移应用到共享 development 或 production 分支。