分片键算法:分片键决定了数据会被分布在哪个分片,原理就是根据分片键的值计算出数据所分布的分片ID计算的过程就是分片键算法,即 f(shardKey) = shardID,常见的算法有三种
- Range
- Hash
- Lookup
一、Range
范围分片算法,按照字段的取值范围来计算数据所属分片,常见的有时间范围分片
二、Hash
Hash 算法的定义很简单:输入任意关键字,得到一个固定长度输出。
在分库分表中,输入关键字指的是分片键对应的字段值,输出对应的是表示分片的 ID。
三、Lookup
也称之为目录映射或查找映射,其实就是直接定义分片和分片键值之间的映射关系,将其维护在配置或数据库中,是一种静态分片.
比如为了满足不同国家对数据存储的要求,需要将数据按国家进行分片,由于国家字段值并不多的,我们可以做简单的映射:中国=分片 1、美国=分片2、其他=分片3。
算法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Range | 1. 实现简单 2. 分片键范围查询效率高 3. 支持动态分片(即到达一个范围自动创建一个分片),扩容简单 | 1. 数据热点问题,某个范围的数据可能很大或很小 2. 不具备写分散性 | 1. 数据量大,需要范围查询 |
Hash | 1. 数据分散均匀 | 1. 分片扩容复杂,因为需要重新分布数据 2. 不适合范围查询 2. | 1. 并发量大 2. 数据量大,随机读取性大 |
Lookup | 1、实现简单,直接定义映射关系即可 | 配置错误时会出现异常 | 1、适合分片键是枚举值的场景 |
本文转至:zuanzi https://zhuanlan.zhihu.com/p/609637884?utm_id=0