假设我们要对用户的数据进行分片存储,依据的是用户id
1 关于固定分配
核心是利用哈希函数将输入的id值映射到一个输出值上,这个输出值就直接是分片id,注意这一点很重要,这是与混合分配策略区分的关键。
![在这里插入图片描述](https://img-blog.csdnimg.cn/542bf1942c0544ff928059acb1b68d09.png)
2 动态分配
动态分配不使用哈希函数,而是先建立一张分配表,有用户id字段以及分片id字段,当加入一个新用户时会直接按预先设置好的规则将映射记录加入到表中,取出数据时会先查询这个映射表得知用户数据存储在哪个分片上,然后再去对应的分片查找数据。
![在这里插入图片描述](https://img-blog.csdnimg.cn/36019054a0b54e568a71f2f23431e4cc.png)
3 混合分配方式(固定+动态)redis的分片策略采用的就是这种模式。
可以参考这篇文章:Redis Cluster数据分片实现原理、及请求路由实现
乍一看,可能会把它和固定分配方式混淆,确实很像,因为一开始都用到了哈希函数,这一点体现了固定分配;体现动态分配的点在于混合分配中的哈希函数的输出不直接等于分片id,它的输出可以根据一定的规则与某一个分片id进行绑定,这就相当于有了映射关系,类似于动态分配,这里的映射关系也可以存储到一张数据表中。
![在这里插入图片描述](https://img-blog.csdnimg.cn/29b50f41ccab4e2d950f42faf81d417b.png)
4 显式分配
核心:把数据粉片号编码到ID中,这样就能避免额外 “查询分片映射表”的操作
![在这里插入图片描述](https://img-blog.csdnimg.cn/44abdb4476d149d683638ee524a8091d.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/62ba001cd099409590fbcbc2b9902c24.png)