在Java面试中,分库分表是解决数据库性能瓶颈和扩展性问题的常见方案。分库策略主要关注如何将数据水平拆分到多个数据库实例中,以下是详细的分库策略解析:
一、分库策略的核心目标
- 负载均衡:分散数据存储和查询压力,避免单库成为性能瓶颈。
- 扩展性:支持业务增长,通过增加数据库实例线性提升系统容量。
- 业务适配:根据查询模式和数据特性选择最优拆分方式,减少跨库操作。
二、常见的分库策略
1. 哈希分库(Hash Sharding)
- 原理:根据分库键(如用户ID)计算哈希值,按数据库实例数取模,确定数据归属。
int dbIndex = Math.abs(userId.hashCode()) % dbCount;
- 适用场景:
- 数据分布均匀,无明确范围查询需求(如用户表、订单表)。
- 需要避免热点问题(如电商系统中用户订单分散存储)。
- 优点:
- 数据分布均匀,各库负载相对均衡。
- 直接路由,查询效率高。
- 缺点:
- 扩容复杂:新增库时需重新哈希,数据迁移成本高。
- 跨库查询困难:如按非分库键字段查询需扫描所有库。
</