当前位置: 首页 > news >正文

分布式数据库分片自动扩展

分片机制

某个数据表,分片数量是固定的,如256

当你执行INSERTSELECT时,数据库(或中间件 Proxy)会拿到你指定的Shard Key(分片键),然后丢进公式里:

Shard_ID=Hash(Shard_Key)(mod256)Shard\_ID = Hash(Shard\_Key) \pmod{256}Shard_ID=Hash(Shard_Key)(mod256)

  • 结果永远在 0-255 之间:无论数据量怎么变,只要你的分片键(比如user_id)不变,计算出来的Shard_ID永远是同一个。

物理扩容


这张图非常清晰地展示了 TDSQL(以及类似架构的分布式数据库)是如何从逻辑分片演进到物理扩容的过程。

我们可以把这张图分为三个阶段来解读:

1. 左侧:用户视角的“逻辑表” (G)

  • SQL 引擎 (Proxy):这是用户直接接触的层。对你(开发者)来说,你看到的只有一张巨大的表G
  • 透明性:你不需要关心数据具体在哪。你只需要发送SELECT * FROM G WHERE id = ...,SQL 引擎会自动帮你计算这行数据应该去哪个“小表”里找。

2. 中间:分片的“逻辑存在” (G0 - G255)

这里是理解分片的关键:在 TDSQL 中,数据表被预先切分成了固定数量的“逻辑分片”(也叫 Group)。

  • 预分片 (Pre-sharding):图中显示表 G 被拆分成了 G0 到 G255,总共 256 个逻辑分片。
  • 初始状态 (Set 00):在业务初期,数据量并不大。为了节省成本,这 256 个逻辑分片可以全部挤在Set 00这一个物理容器里(也就是一组 1 主 2 从的 MySQL 实例)。
  • 此时的卦象:逻辑上是分布式的,但物理上是单点的。这时候性能瓶颈在于这个物理 Set 的 CPU 和磁盘。

3. 右侧:物理拆分与扩容 (Set 00 - Set 255)

当业务爆发,Set 00 的压力太大时,这张图的核心动作——拆分就发生了:

  • 物理迁徙:TDSQL 的调度系统会自动把逻辑分片搬家。例如,把 G1 搬到Set 01,把 G255 搬到Set 255
  • 负载均衡:最终,每个物理 Set 只负责一部分逻辑分片。比如 Set 00 只管 G0,Set 01 管 G1。
  • 无限扩展:如果 256 个 Set 还不满足需求,理论上你可以继续增加物理服务器。

分片迁移

这个过程通常被称为平滑迁移,其目标是在业务无感的情况下,将逻辑分片从一个物理 SET 搬迁到另一个物理 SET。

以下是分片迁移的详细深度拆解:

1. 分片迁移的标准过程

迁移过程通常分为四个关键阶段:

  1. 全量同步(Full Sync):
    • 系统在源 SET(源节点)上创建一个数据快照。
    • 将快照数据发送到目标 SET。此时,业务依然在源 SET 上进行读写。
  2. 增量同步(Incremental Sync):
    • 在全量迁移期间产生的增量数据(如 MySQL 的 Binlog),会通过实时解析并回放到目标 SET 中。
    • 目标 SET 追赶进度的过程是持续的,直到两边的数据差异(Lag)极小。
  3. 一致性校验:
    • 在切换前,后台会对源和目标的数据进行抽样或全量校验,确保搬迁没有导致数据损坏。
  4. 切流切换(Switch / Cutover):
    • 这是最关键的一步。系统会将路由信息指向新的 SET。

2. 是否有“锁”的参与?

现代分布式数据库追求Lock-free(无锁)Minimal Lock(最小锁)

  • 全量与增量阶段:完全无锁。业务读写不受影响。源库通过 MVCC(多版本并发控制)读取快照,不阻塞写操作。
  • 切换阶段:存在“瞬时禁写”。
    • 为了保证数据绝对一致,在路由信息正式更新前的最后几毫秒,源 SET 会进入一个极短的ReadOnly(只读)状态。
    • 在这几毫秒内,系统等待最后的增量日志追平。
    • 感官影响:业务侧可能会感受到一个很小的耗时抖动(毫秒级),通常不会导致连接断开,只会有短暂的请求延迟增加。

3. 路由信息是怎么变化的?

路由信息的更新是实现“平滑”的关键,涉及到Proxy(网关)元数据中心(Metadata/Catalog)的配合:

  1. 元数据状态变更:
    • 当数据追平并准备切换时,调度中心会在元数据数据库(如 TDSQL 的 ZooKeeper 或内部元数据库)中将该分片的指向从SET_A更新为SET_B
  2. 路由下发:
    • Proxy 会感知到元数据的变化。此时,旧的请求如果还在发往SET_A,Proxy 会根据新的路由配置将其重定向到SET_B
  3. 路由预热与刷新:
    • 有些架构会采用“预推”机制,先让 Proxy 知道即将切换,等真正切换指令下达时,Proxy 瞬间完成切换。
http://www.jsqmd.com/news/777734/

相关文章:

  • 制造企业做 AI:从问答入口到排产、质检、仓储的智能闭环
  • RK3588 NPU实测:YOLOv8与YOLOv5速度对比,以及YOLOv8-seg分割模型部署避坑指南
  • 手机号定位神器:5分钟搭建你的专属归属地查询系统
  • 2026年AI写小说软件Top5盘点
  • 从磁盘到内存:一次文件读取的 CPU-DMA 协作之旅
  • 百度网盘提取码智能获取:3分钟告别密码搜索焦虑
  • 从Blender到3D打印机:3MF插件如何简化你的工作流程
  • 天津鑫汇达废旧物资回收:靠谱的天津废金属回收公司 - LYL仔仔
  • B 端表单页设计:从核心逻辑到落地实践
  • 创业团队如何利用Taotoken统一管理多个AI模型API密钥
  • Redis如何防范脑裂导致的数据丢失_配置min-replicas-to-write强制要求可用从节点数
  • 如何在5分钟内彻底解决OBS音频捕获难题:win-capture-audio实战指南
  • 财务公司哪个更可靠
  • 从宿舍恶作剧到通信系统原型:一次关于实验设计与信息编码的实践
  • 如何快速提升游戏体验:魔兽争霸3现代硬件兼容性完全指南
  • 抖音批量下载助手:一键获取全系列作品的终极解决方案
  • 最新免费匿名聊天室 PHP多人在线聊天室源码
  • 广东专业度高的LOGO设计公司:世答创意深度解析 - 奔跑123
  • 免费去水印工具推荐:2026 实测哪些网站、软件和 APP 能用?
  • 应对高并发场景Taotoken的稳定性与容灾路由实践
  • 深度解析:打破芯片壁垒,基于GB28181+RTSP的异构边缘计算AI视频架构实现
  • 揭秘芯片的“智能限流”术:如何让充电器在全球电压下稳定输出?
  • 工程师职业困境:从技术贵族到可替代零件,如何重构个人职业战略
  • 27《CAN总线隔离电路设计:从原理到实践,提升通信稳定性》
  • 手把手教你用TMS320F28377D的ePWM模块驱动永磁同步电机(附完整代码)
  • JS逆向 -最新版 某里(decode__1174盼之、md5__1803中兔日上、timestamp__1501拙政园、md5__1038雪球)醇酸
  • GPT-Image-2 如何用于电商主图与详情页素材生成
  • 别再只会用硬件IIC了!手把手教你用STM32的GPIO模拟IIC驱动AT24C02(附完整代码)
  • Mac NTFS写入终极指南:如何免费解锁Windows硬盘的完整读写权限
  • 别再搞混了!PyTorch和OpenCV处理RGB图像时,HWC和CHW格式到底怎么选?