TiDB Serverless Branching:通过数据库分支简化应用开发流程
2023 年 7 月 10 日,TiDB Serverless 正式商用。这是一个完全托管的数据库服务平台(DBaaS),提供灵活的集群配置和基于用量的付费模式。紧随其后,TiDB Serverless Branching 的测试版也发布了。
TiDB Serverless Branching 功能使用户能够为其 TiDB Serverless 集群创建分支。这些分支可以实现并行开发,促进新功能快速迭代,排查故障,开发者无需中断生产数据库的运行。该功能不仅简化了开发和部署过程,还保持了生产环境中数据库的稳定性和可靠性。
分支是什么?
对于集群而言,分支是一个独立的实例,其中包含一份原始集群的数据快照。它建立了一个隔离的环境,以便在不影响原始集群的情况下进行各种操作。
当为集群创建一个分支时,该分支中的数据与原始集群开始分叉,这意味着在原始集群或分支中进行的后续更改将不会被同步。
TiDB Serverless 采用了写时复制 (copy-on-write )技术,以实现快速、平稳地创建分支。这种方法允许原始集群与其分支之间共享数据。这个操作一般在几分钟内就能完成,对用户来说是无感知的,对原始集群的性能也不会有影响。
平衡软件开发速度和质量
在软件开发中,快速推出新功能和全面测试之间的微妙平衡是一个挑战。找到正确的平衡可以实现敏捷开发、更快的迭代,并及时收到宝贵的客户反馈,同时不会影响软件的质量和可靠性。TiDB Serverless Branching 提供了一种方式来找到这个最佳平衡。
为开发人员提供独立环境
在日常开发和测试活动中使用数据库时,开发人员经常面临配额限制、高成本、资源限制和数据质量等挑战。所以通常在团队内共享数据库更实际。但共享数据库往往会导致环境的冲突,开发人员不得不花费额外的精力在应用中添加一些隔离的逻辑。
TiDB Serverless Branching 通过为每个开发人员提供独立的开发和测试环境来解决这些问题。通过消除资源共享和任务干扰,提高生产效率并促进高效的团队协作。

通过类似生产的分支进行高效测试
为了 消除资源共享和任务 间干扰带来的烦恼 ,开发人员通常会在进行开发工作时使用单独的数据库环境,比如在服务器上设置自己的数据库或在 Docker 上启动数据库容器。 然而,这些环境与生产环境存在显著差异,很难模拟出实际的性能和延迟状态。 对于功能测试,则总是需要大量的数据准备工作,可能却仍然无法与实际的生产环境相匹配。 为了确保数据质量,开发人员可以选择生成生产数据库的快照,并在测试环境中还原它,或者费力地构建模拟数据。 然而,这两种方法都很繁琐,会显著降低开发效率。
通过 TiDB Serverless Branching,开发人员将能够在几分钟内快速创建与生产环境相同的分支。这些分支有助于使用最新的生产数据进行测试,并快速检测问题。此外,这些分支完全与生产集群隔离,可以进行更安全的功能测试和故障排除。

与持续集成和持续部署(CICD)流程无缝集成
自动化场景需要先进的环境管理和质量控制。TiDB Serverless Branching 可以轻松集成到自动化的 CICD 工作流中,通过分支整合, 代码质量的把控和测试流程都变得更加流畅 。这确保了产品的质量,同时遵循了高效的软件开发实践。

与 GitHub 集成的分支管理
结合 TiDB Serverless Branching 功能,我们推出了 TiDB Cloud 分支管理 GitHub App。如果开发人员使用 GitHub flow ( https://docs.github.com/en/get-started/quickstart/github-flow ),该应用能够极大程度地简化将分支集成到 CI 流水线中的工作。有关该 GitHub App 的更多详细信息,请参阅我们的文档 ( https://docs.pingcap.com/tidbcloud/branch-github-integration )。
将 TiDB Serverless Branching 与 GitHub CI 流水线集成
我们将使用 tidbcloud-branch-gorm-example ( https://github.com/shiyuhang0/tidbcloud-branch-gorm-example ) 来演示集成过程。tidbcloud-branch-gorm-example ( https://github.com/go-gorm/playground )是一个适用于 TiDB Serverless Branching 的 gorm playground 项目的分支版本 。操作如下:
- 按照说明将您的 TiDB Serverless 集群与 GitHub 仓库连接起来。这将在您的 GitHub 帐户上安装 TiDB Cloud 分支管理 GitHub App。每次创建 pull request 时, 都会触发创建一个新的对应 TiDB Serverless 分支。
- 调整 CI 流水线,使用新创建的 TiDB Serverless 分支来运行测试。
name: tests
on:pull_request:branches: [ master ]
jobs:test:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- uses: tidbcloud/wait-for-tidbcloud-branch@v0id: wait-for-branchwith:token: ${{ secrets.GITHUB_TOKEN }}public-key: ${{ secrets.TIDB_CLOUD_PUBLIC_KEY }}private-key: ${{ secrets.TIDB_CLOUD_PRIVATE_KEY }}timeout-seconds: 600- name: Set up Go 1.19uses: actions/setup-go@v2with:go-version: 1.19
- name: go mod pakcage cacheuses: actions/cache@v2with:path: ~/go/pkg/modkey: ubuntu-latest-go-1.19-${{ hashFiles('go.mod') }}
- name: Testsrun: |GORM_ENABLE_CACHE=true GORM_DIALECT=tidb GORM_DSN="${{ steps.wait-for-branch.outputs.username }}:${{ steps.wait-for-branch.outputs.password }}@tcp(${{ steps.wait-for-branch.outputs.host }}:${{ steps.wait-for-branch.outputs.port }})/test?parseTime=true&tls=tidb" ./test.sh
为了简化 CI 流水线,我们开发了 wait-for-tidbcloud-branch ( https://github.com/tidbcloud/wait-for-tidbcloud-branch ),这是一个辅助的 GitHub Action。它会等到 pull request 对应的 TiDB Serverless 分支就绪后,创建一个新的数据库用户供后续使用。
在完成设置后,每当创建 pull request 时,TiDB Cloud 分支管理 GitHub App 将为拉取请求生成一个 TiDB Serverless 分支。然后,CI 流程将等待分支就绪并将其用于测试。这确保您使用这些分支执行的任何测试都可以映射到生产数据库中的数据,从而更容易及时发现任何潜在问题。

一个具体的开发案例
比如你正在开发 一个 添加唯一索引的 功能 ,但生产数据库中已经存在重复的行。 借助 Ti DB Serverless Branching,CI 流水线可以迅速识别出这类问题。 这是因为测试负载在与生产数据库镜像一致的分支中执行,可以在早期检测到潜在问题。 然而,如果是在模拟数据上进行测试,这类问题很容易被忽视,甚至可能会遗漏到生产环境。

在上面的示例中,我们在数据库中执行了一个简单的 DDL 更改。TiDB 支持在线 DDL ( https://docs.pingcap.com/tidb/stable/ddl-introduction#execution-principles-and-best-practices-of-ddl-statements )变更,用户无需担心影响应用工作负载。然而,随着应用的扩展和测试涉及到更多的业务逻辑,分支对于效率提高和质量保证变得越来越有益。
使用 TiDB Serverless Branching 定制 CI/CD 工作流
TiDB Cloud Branching 工作流专门设计成与流行的应用程序框架兼容,开发人员可以将其简单地集成到现有的 CI 流水线中。 如 果 TiDB Serverless Branching GitHub App 不能完全满足你的需求,在 TiDB Cloud CLI ( https://docs.pingcap.com/tidbcloud/get-started-with-cli )、setup-tidbcloud-cli ( https://github.com/tidbcloud/setup-tidbcloud-cli ) 和 GitHub Actions 的帮助下,你也可以定制分支的 CI/CD 工作流。
结论
借助 TiDB Serverless Branching,开发人员可以并行工作,快速进行新功能的迭代而不影响生产数据库的正常稳定运行。该功能简化了开发和部署过程,同时确保了生产数据库的稳定性和可靠性。
我们希望更多的开发人员能够使用到 TiDB Serverless Branching,我们也将不断改进和扩展这一功能,以满足大家不断变化的需求,敬请期待!
点击链接,立即试用 TiDB Serverless Branching,获取更简化、快速的应用程序开发体验!
TiDB Cloud
相关文章:
TiDB Serverless Branching:通过数据库分支简化应用开发流程
2023 年 7 月 10 日,TiDB Serverless 正式商用。这是一个完全托管的数据库服务平台(DBaaS),提供灵活的集群配置和基于用量的付费模式。紧随其后,TiDB Serverless Branching 的测试版也发布了。 TiDB Serverless Branc…...
运用亚马逊云科技Amazon Kendra,快速部署企业智能搜索应用
亚马逊云科技Amazon Kendra是一项由机器学习(ML)提供支持的企业搜索服务。Kendra内置数据源连接器,支持快速访问Amazon S3、AmazonRDS、AmazonFSX以及其他外部数据源,帮助用户自动提取文档并建立索引。Kendra支持超过30多种多国语…...
C# 使用 OleDbConnection 连接读取Excel的方法
Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。 (1)Sqlconnetcion类的对象连接是SQL Server数据库; (2)OracleConnection类的对象连接Oracle数据库&…...
【LeetCode-中等题】98. 验证二叉搜索树
文章目录 题目方法一:BFS 层序遍历方法二: 递归方法三: 中序遍历(栈)方法四: 中序遍历(递归) 题目 思路就是首先得知道什么是二叉搜索树 左孩子在(父节点的最小值&#x…...
Leetcode-每日一题【剑指 Offer 37. 序列化二叉树】
题目 请实现两个函数,分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 …...
删除无点击数据offer数据分析使用
梳理思路: 1、 获取 7month 和 8month fullreport 报表中 所有offer;输出结果:offerid, totalClickCount; 2、 分析数据7month totalClickCount0 and 8month totalClickCount0 的offer去除; result.…...
【Apollo学习笔记】——规划模块TASK之SPEED_BOUNDS_PRIORI_DECIDER
文章目录 前言SPEED_BOUNDS_PRIORI_DECIDER功能简介SPEED_BOUNDS_PRIORI_DECIDER相关配置SPEED_BOUNDS_PRIORI_DECIDER流程将障碍物映射到ST图中ComputeSTBoundary(PathDecision* path_decision)ComputeSTBoundary(Obstacle* obstacle)GetOverlapBoundaryPointsComputeSTBounda…...
物理机ping不通windows server 2012
刚才尝试各种方法,在物理机上就是ping不能wmware中的windows server 2012 . 折腾了几个小时,原来是icmp 被windows server 2012 禁用了 现在使用使用以下协议就能启用Icmp协议。 netsh firewall set icmpsetting 8然后,就能正常ping 通虚…...
誉天HCIE-Datacom丨为什么选择誉天数通HCIE课程学习
大家好,我是誉天HCIE-Datacom的一名学员,在2022年觉得自己技术水平不够,想要提升自己,经朋友介绍在誉天报的名。 听朋友说誉天的阮Sir的课讲的非常好,我在B站上看了几节阮老师的课确实比之前在听得其他机构的课程讲的要…...
Python文本终端GUI框架详解
今天笔者带大家,梳理几个常见的基于文本终端的 UI 框架,一睹为快! Curses 首先出场的是 Curses。 Curses 是一个能提供基于文本终端窗口功能的动态库,它可以: 使用整个屏幕 创建和管理一个窗口 使用 8 种不同的彩色 为程序提供…...
01_lwip_raw_udp_test
1.打开UDP的调试功能 (1)设置宏定义 (2)打开UDP的调试功能 (3)修改内容,串口助手打印的日志信息自动换行 2.电脑端连接 UDP发送一帧数据 3.电路板上发送一帧数据...
学习ts(十一)本地存储与发布订阅模式
localStorage实现过期时间 目录 准备 安装 npm i rollup typescript rollup-plugin-typescript2// tsconfig.json"module": "ESNext","moduleResolution": "node", "strict": false, // rollup.config.js import …...
MySQL对NULL值处理
在使用数据库时,有时需要表示未知值,这时可以使用NULL值表示。引入NULL值后,会对原有的使用产生影响,这里记录下常见的场景,以做记录。 NULL含义 在MySQL中,NULL值表示一个未知值,表示不可知、…...
Vector 动态数组(迭代器)
C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 Vector<T> 动态数组(模板语法) 本文目标 1 熟悉迭代器设计模式; 2 实现数组的迭代器; 3 基于迭代器的容器遍历; 迭代器语法介绍 对迭…...
多组背包恰好装满方案数
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 现在有一个大小n*1的收纳盒,我们手里有无数个大小为1*1和2*1的小方块,我们需要用这些方块填满收纳盒,请问我们有多少种不同的方法填满这个收纳盒 分析&…...
Oracle查询语句中做日期加减运算
在Oracle中,可以使用日期函数来实现日期的加减。 若想在日期上加上一定的天数,可以使用"INTERVAL"关键字。例如,如果要将一个日期加上3天,可以使用以下代码: SELECT SYSDATE INTERVAL 3 DAY FROM DUAL; …...
Unity贝塞尔曲线的落地应用-驱动飞行特效
前言 本文教你怎么用贝塞尔曲线驱动一个飞行特效 中间点的准备 开放一些可以给策划配置的变量 startPos flyEffect.transform.position; var right (GetAimPoistion(targetActor) - flyEffect.transform.position).x > 0?1:-1; midPos startPos new Vector3(righ…...
VTK——设置交互样式上的鼠标回调函数
函数介绍 VTKPointPickerInteractorStyle是一个自定义的交互样式类,它是VTK库中vtkInteractorStyleTrackballCamera类的子类。VTK(Visualization Toolkit)是一个开源的,跨平台的库,用于处理、渲染和视觉化科学数据。它…...
Flutter实现动画列表AnimateListView
由于业务需要,在打开列表时,列表项需要一个从右边飞入的动画效果,故封装一个专门可以执行动画的列表组件,可以自定义自己的动画,内置有水平滑动,缩放等简单动画。花里胡哨的动画效果由你自己来定制吧。 功…...
【LeetCode-中等题】236. 二叉树的最近公共祖先
文章目录 题目方法一:后序遍历 回溯 题目 方法一:后序遍历 回溯 解题的核心就是:采用后序遍历 讨论p,q是否在当前的root的两边,如在两边则返回当前节点root 如何不在两边,只要出现一个节点等于p或者q就…...
新手福音:跳过jdk安装,在快马平台开启你的java编程第一课
作为一个Java新手,最让人头疼的往往不是学习语法本身,而是那些繁琐的环境配置。记得我刚开始学Java时,光是安装JDK就折腾了大半天,还要配置环境变量、测试安装是否成功...这些准备工作简直能把学习的热情消磨殆尽。 不过现在有了I…...
《YOLO11魔术师专栏》专栏介绍 专栏目录
《YOLO11魔术师专栏》将从以下各个方向进行创新(更新日期25.07.23): 【原创自研模块】【多组合点优化】【注意力机制】 【主干篇】【neck优化】【卷积魔改】 【block&多尺度融合结合】【损失&IOU优化】【上下采样优化 】 【小目标…...
React Scroll Parallax核心组件详解:Parallax、ParallaxBanner和ParallaxProvider
React Scroll Parallax核心组件详解:Parallax、ParallaxBanner和ParallaxProvider 【免费下载链接】react-scroll-parallax 🔮 React hooks and components to create parallax scroll effects for banners, images or any other DOM elements. 项目地…...
如何用开源工具实现专业级图像修复与纹理合成?揭秘GIMP Resynthesizer的技术奥秘
如何用开源工具实现专业级图像修复与纹理合成?揭秘GIMP Resynthesizer的技术奥秘 【免费下载链接】resynthesizer Suite of gimp plugins for texture synthesis 项目地址: https://gitcode.com/gh_mirrors/re/resynthesizer 在数字图像处理领域,…...
CSRankings数据更新流程揭秘:从GitHub PR到季度发布
CSRankings数据更新流程揭秘:从GitHub PR到季度发布 【免费下载链接】CSrankings A web app for ranking computer science departments according to their research output in selective venues, and for finding active faculty across a wide range of areas. …...
DeepSeek总结的 PostgreSQL 19:为 UPDATE/DELETE 添加 FOR PORTION OF 子句
原文地址:https://www.depesz.com/2026/04/02/waiting-for-postgresql-19-add-update-delete-for-portion-of/ 等待 PostgreSQL 19:为 UPDATE/DELETE 添加 FOR PORTION OF 子句 2026 年 4 月 1 日,Peter Eisentraut 提交了一个补丁…...
从开题到答辩,AI全程辅助是一种怎样的体验?
2026年,毕业论文的写作方式已经发生了根本性变化。从开题到答辩,AI工具深度嵌入每一个环节,但这届毕业生也逐渐认清一个事实:AI是副驾驶,你才是驾驶员-1。以下是基于2026届毕业生真实经历的论文全程实录。 一、开题阶段…...
TPAMI 2025 | 港城大团队新作:强化学习引导 ODE 轨迹,提升图像复原性能
点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达在计算机视觉领域,图像恢复一直是核心研究方向之一——从模糊的监控画面中还原清晰细节、让水下拍摄的照片重现真实色彩、给低光照的夜景图像提亮增晰&#x…...
L-SHADE算法实战:如何用线性种群缩减提升优化性能(附Python代码)
L-SHADE算法实战:如何用线性种群缩减提升优化性能(附Python代码) 在优化算法的世界里,差分进化(Differential Evolution, DE)一直以其简单高效著称。但传统DE算法在面对高维复杂问题时,常常陷入…...
基于三菱PLC的自动配料控制系统的设计
基于PLC的自动配料控制系统设计【配套10000字设计lumwen,三菱PLC组态王组态等】 基于三菱PLC的自动配料控制系统的设计 混凝土搅拌站分为:砂石给料、水和一些特殊的加剂给料、传输搅拌与存储 搅拌机控制系统上电后,进入人机对话的操作界面&am…...
