Skip to content
作者:daily5am创建:-更新:-
字数:预计阅读: 分钟访问量:--

分库分表策略和中间件

分库分表是解决数据库性能瓶颈的重要手段,理解分库分表策略对于设计高并发系统至关重要。

核心问题

什么时候需要分库分表?

  1. 单表数据量过大:超过千万级别
  2. 查询性能下降:即使有索引也慢
  3. 写入性能瓶颈:写入成为瓶颈
  4. 存储空间不足:单库存储空间不够

分库分表策略

  1. 水平分库

    • 按数据范围分:user_0, user_1, user_2
    • 按哈希分:hash(user_id) % 3
  2. 水平分表

    • 按时间分:user_2024, user_2025
    • 按哈希分:hash(user_id) % 10
  3. 垂直分库

    • 按业务模块分:用户库、订单库、商品库
  4. 垂直分表

    • 按字段分:主表和扩展表

分片键选择

  • 选择原则

    • 数据分布均匀
    • 查询经常使用
    • 避免跨库查询
  • 常见选择

    • 用户ID
    • 订单ID
    • 时间字段

中间件对比

ShardingSphere

  • 功能全面
  • 支持读写分离
  • 支持分布式事务
  • 配置灵活

MyCat

  • 功能丰富
  • 支持多种数据库
  • 配置相对复杂

常见面试题

  1. 分库分表后如何保证ID唯一性?

    • 使用雪花算法
    • 使用UUID
    • 使用数据库自增ID + 分片号
  2. 如何解决跨库查询?

    • 使用中间件聚合
    • 应用层聚合
    • 避免跨库查询
  3. 如何迁移数据?

    • 双写方案
    • 数据同步
    • 逐步切换