1.常见的数据分片策略
无论是分库,还是分表,数据分片策略类似,主要有下面几种:
- 范围分片:按照某个连续的范围划分数据,例如按照时间区间或者按照用户ID的范围。
- hash分片:按照某种哈希算法计算每条数据的哈希值,然后将相同哈希值的数据存储到同一片中。
- 枚举分片:按照某个固定的枚举值划分数据,例如按照地域分片。
- 分布式一致性哈希:使用哈希算法将数据分散到一个哈希环上,然后根据物理节点在哈希环上的位置,将数据分配到相应的节点上。
2.各种分片策略的优缺点
2.1.范围分片
优点:
- 数据顺序存储,能够支持范围查询操作。
- 易于管理和扩容,可以在数据范围之外新增数据节点。
- 对于一些范围固定的数据类型,如时间戳,可根据范围进行分片,将数据均匀分布在各节点上。
缺点:
- 当数据分布不均时,容易导致部分分片集中大量的热点数据,流量都集中到部分数据库实例,造成性能瓶颈。
- 数据量不可控,某些范围内的数据可能会非常大。
2.2.hash分片
优点:
- 数据均匀分布在各个节点上,可以有效避免热点数据和数据倾斜问题。
- 支持对多个字段进行哈希,可避免某个字段值过于集中的问题。
缺点:
- 不支持范围查询,只能通过全表扫描或者多次查询组合结果的方式进行数据查询操作。
- 不支持数据按照一定规则顺序存储。
- 新增或者减少数据库节点,成本较大,需要迁移大量的数据。
2.3.枚举分片
优点:
- 可以根据枚举值进行分片,将相同枚举值的数据分散到相同节点。
- 枚举值相对固定,枚举值数量也不多,易于管理。
缺点:
- 枚举值的数量不可过多,适合按地区划分这种粗粒度的划分数据。
- 枚举分片通常需要搭配其他分片算法进行二次分片,否则容易出现数据热点问题,例如广东地区数据就上亿,广东地区内部还需要二次拆分数据。
2.4.分布式一致性哈希
优点:
- hash分片的升级版,解决了hash分片的部分弊端。
- 支持动态增减节点,节点变化时只需对部分数据进行迁移,不会导致整个数据集的迁移。
- 数据均匀分布,不会产生热点数据和数据倾斜问题。
- 支持节点故障的自动处理,保证服务的高可用性。
缺点:
- 不支持数据范围查询,只能通过全表扫描或者多次查询组合结果的方式进行数据查询操作。
- 节点变化时需要进行数据迁移,会影响查询性能。
提示:水平分库分表规则,在实际应用场景可以灵活调整和组合,并不是一成不变。