分库分表-除了hash分片还有别的吗?
在分库分表的设计中,除了常见的 Hash 分片,还有多种策略根据业务场景灵活选择。以下是几种主流的分库分表策略及其应用场景、技术实现和优缺点分析,结合项目经验(如标易行投标服务平台的高并发场景)进行说明:
一、常见分库分表策略
1. 范围分片(Range Sharding)
- 原理:按分片键的范围划分数据(如时间、ID区间)。
-- 示例:订单表按创建时间分表 CREATE TABLE orders_202401 (分区键: create_time < '2024-02-01'); CREATE TABLE orders_202402 (分区键: create_time < '2024-03-01');
- 适用场景:
- 时间序列数据(如日志、订单按月份归档)。
- 需要范围查询(如查询某用户近3个月的订单)。
- 优点:
- 查询高效:范围查询只需访问特定分片。
- 扩容简单:新增分片只需处理新范围数据。
- 缺点:
- 数据分布不均:可能导致新分片负载高,旧分片闲置。
- 热点问题:如双11订单集中在某个月份,导致单分片压力大。
2. 一致性哈希分片(Consistent Hashing)
- 原理:将数据和节点映射到哈希环,数据按顺时针路由到最近节点。
// 虚拟节点解决数据倾斜 List<String> virtualNodes = generateVirtualNodes(nodes,