分库分表理论

背景

互联网系统需要处理海量用户的并发请求和数据存储。

面临挑战

  1. 数据量指数级增长
  2. 历史数据长期保存
  3. 高并发读写
  4. 查询延迟毫秒级别

解决方案

  1. NoSQL数据库
  2. NewSQL数据库
  3. 分库分表

垂直拆分(Vertical Partitioning)

适用场景

单个数据库中存在大量表

拆分原则

按业务领域将表分类到不同数据库

垂直分库

将用户表和订单表拆分到不同的数据库中

垂直分表

将一张表中不常用的字段拆到另一张表中

优点

  • 业务解耦清晰
  • 数据可维护性强
  • 查询性能提升
  • 缓存利用率优化

缺点

  • 主键冗余管理
  • 跨表连接问题
  • 单表容量限制
  • 事务处理困难

水平拆分(Horizontal Partitioning)

适用场景

单表数据量过大(如超过5000万条记录)

拆分方式

  • 按范围拆分:如按用户ID区间划分
  • 按哈希值拆分:如对订单ID取模
  • 按时间拆分:如按月分表

优点

  • 数据库分担计算压力
  • 解决单库性能瓶颈
  • 应用改造成本可控
  • 系统扩展性提升

缺点

  • 分片规则设计复杂
  • 跨分片查询性能低下
  • 分布式事务挑战
  • 扩容维护成本高