分库分表策略和中间件
分库分表是解决数据库性能瓶颈的重要手段,理解分库分表策略对于设计高并发系统至关重要。
核心问题
什么时候需要分库分表?
- 单表数据量过大:超过千万级别
- 查询性能下降:即使有索引也慢
- 写入性能瓶颈:写入成为瓶颈
- 存储空间不足:单库存储空间不够
分库分表策略
水平分库
- 按数据范围分:user_0, user_1, user_2
- 按哈希分:hash(user_id) % 3
水平分表
- 按时间分:user_2024, user_2025
- 按哈希分:hash(user_id) % 10
垂直分库
- 按业务模块分:用户库、订单库、商品库
垂直分表
- 按字段分:主表和扩展表
分片键选择
选择原则:
- 数据分布均匀
- 查询经常使用
- 避免跨库查询
常见选择:
- 用户ID
- 订单ID
- 时间字段
中间件对比
ShardingSphere
- 功能全面
- 支持读写分离
- 支持分布式事务
- 配置灵活
MyCat
- 功能丰富
- 支持多种数据库
- 配置相对复杂
常见面试题
分库分表后如何保证ID唯一性?
- 使用雪花算法
- 使用UUID
- 使用数据库自增ID + 分片号
如何解决跨库查询?
- 使用中间件聚合
- 应用层聚合
- 避免跨库查询
如何迁移数据?
- 双写方案
- 数据同步
- 逐步切换