单节点数据库无法支撑无限增长的数据量。数据分片(Sharding)与扩容设计能突破瓶颈。
1. 为什么要分片
- 数据量超过单库存储能力。
- 查询性能下降。
- 单点风险增加。
2. 分片策略
-
水平分片
- 按主键或业务字段分布到多个节点。
- 常用算法:范围分片、哈希分片、一致性哈希。
- 优点:存储和访问均衡。
-
垂直分片
- 按业务模块拆分数据库,如用户库、订单库。
- 减少表关联,提高查询效率。
3. 分片中间件
- ShardingSphere:支持透明路由、事务、分布式ID。
- MyCAT:轻量代理层,支持读写分离。
- Vitess:YouTube开源,适合超大规模数据。
4. 数据扩容方式
- 预分片:提前创建多个空分片,避免后期迁移。
- 在线迁移:使用数据同步工具(Canal、Debezium)。
- 动态路由表:根据分片规则实时选择数据库。
5. 跨分片查询问题
- 聚合查询需在应用层合并结果。
- 可通过中间层执行MapReduce式聚合。
- 尽量避免跨分片事务。
6. 实践建议
- 分片键一旦确定,后期调整代价大。
- 监控分片数据量,防止热点分片。
- 扩容前务必验证分片均衡。
结论:分片是性能的极限手段。设计良好的分片规则,让系统可无限水平扩展,而不失一致性。