跳转到主要内容

关键词词典

分库分表

把一张大表按规则拆到多个库或多个表,突破单库的容量、连接数与写入瓶颈。

又称分库分表Sharding数据分片

数据

两种拆分

  • 垂直拆分:按业务把一张宽表拆成多张窄表(或把一个库拆成多个库),本质是职责分离。
  • 水平拆分:按分片键(sharding key)把同一张表的数据行分散到多个库/表,本质是数据分散。通常说的分库分表指的是后者。

分片键是整个方案的命门

分片键决定了:

  1. 查询能否路由到单分片。带分片键的查询可以精确定位;不带分片键的查询要广播到所有分片再归并,代价极高。
  2. 数据是否倾斜。按地区分库,北上广深的库会先爆;按客户号哈希则相对均匀。
  3. 跨分片事务与关联。同一个客户的账户和交易如果不落在同一分片,转账和联表查询都要跨库。

实践原则:让最频繁的查询和事务都在一个分片内完成。银行场景常按客户号分片,正是为了让同一客户的所有数据同处一地。

绕不开的配套问题

问题常见做法
全局唯一 ID号段模式、雪花算法、数据库序列
跨分片排序分页各分片取回后在中间层归并,深分页代价极大
扩容迁移一致性哈希 + 双写迁移,避免全量重分布
分布式事务尽量避免;兜底用 Saga 或消息最终一致

不是银弹

分库分表会显著抬升系统的运维与开发复杂度:一次业务逻辑改动可能要在几十个分片上验证,跨分片查询要重写,数据订正要批量刷。在动它之前,先确认瓶颈真的在数据层——很多时候加索引、冷热分离、归档历史数据就能解决问题。

提及本词的文章

相关词条