mysql 分库分表之分片键概念

昨天遇见小学同班同学,没想到他混的这么差,只往我碗里放了一块钱。

 

在进行分库分表的时候,有个分片键概念

:分片键是用于决定数据会被分布在哪个分片中的字段

 

分片算法:分片键决定了数据会被分布在哪个分片,原理就是根据分片键的值计算出数据所分布的分片 ID.

计算的过程就是分片键算法,即 f(shardKey) = shardID,常见的算法有三种

1、Range

范围分片算法,按照字段的取值范围来计算数据所属分片

优点:

1)实现简单

2)分片键范围查询效率高

3) 支持动态分片(即到达一个范围自动创建一个分片),扩容简单

缺点:

1)数据热点问题,某个范围的数据可能很大或很小

2)不具备写分散性

 

2、Hash

Hash 算法的定义很简单:输入任意关键字,得到一个固定长度输出

优点:

1)数据分散均匀

缺点:

1)分片扩容复杂,因为需要重新分布数据

2)不适合范围查询

 

3、Lookup

也称之为目录映射或查找映射,其实就是直接定义分片和分片键值之间的映射关系,将其维护在配置或数据库中,是一种静态分片

优点:

1)实现简单,直接定义映射关系即可

缺点:

1)配置错误时会出现异常

 

分片键的选择

1)使用高频字段

2)基数大

3)稳定

4)可以尽量保证数据分布均匀

5)可以尽量保证事物在同一个分片

 

基因分片:一个字段包含了两种分片信息

原理:X % 2^n = X 的二进制的最后 n 位

完成某些需求:

  如果 SQL 中有订单号,可以直接定位到单个订单数据所在分片;

  如果 SQL 中只有用户 ID ,可以取用户 ID 的一部分来定位到这个用户所有订单数据所在分片;

注:淘宝的订单列表就会发现订单的后几位都是一致的

 

posted @ 2022-07-18 09:04  方达达  阅读(121)  评论(0编辑  收藏  举报