跳至主要內容

分库分表原理与实践

KSJ大约 2 分钟架构师

分库分表原理与实践

分库分表是应对大数据量、高并发场景下数据库性能瓶颈的常用架构手段。

定义

  • 分库:将数据按某种规则分散存储到多个数据库实例中。
  • 分表:将单表数据按某种规则拆分到多个物理表中。

常见问题

  • 跨库/跨表查询复杂
  • 分布式事务难以保证强一致性
  • 主键全局唯一性设计
  • 数据迁移与扩容

应用场景

  • 电商、社交、金融等大规模数据系统
  • 订单、日志、用户等大表

数据倾斜问题

数据倾斜是指某些分片(库/表)上的数据量或访问量远高于其他分片,导致部分节点压力过大,影响整体性能和可用性。

成因

  • 分片键选择不合理,导致数据分布不均
  • 部分业务天然存在“超级用户”或“热点ID”

解决方案

  • 优化分片键设计,选择高区分度字段
  • 对热点数据单独拆分或做特殊处理(如热点库/表、缓存)
  • 动态迁移数据,定期重分片

热点数据问题

热点数据是指被频繁访问或更新的少量数据,容易成为系统瓶颈。

成因

  • 某些用户、商品、话题等访问量极高
  • 活动期间产生的流量集中

解决方案

  • 引入缓存(如 Redis)缓解数据库压力
  • 热点数据单独存储或分库
  • 采用异步写入、削峰填谷等手段

读扩散问题

读扩散是指一次查询需要访问多个分库分表,导致查询效率下降,甚至带来网络和资源消耗的激增。

成因

  • 需要聚合多分片数据(如全局统计、跨表分页)
  • 业务查询未能局部化

解决方案

  • 业务层限制跨分片查询,尽量单分片操作
  • 预聚合、冗余存储、引入中间汇总表
  • 利用分布式中间件(如 ShardingSphere、Mycat)优化路由和聚合

参考资料