作者回复: 如果是根据某个字段的取值范围进行range-based分片,有可能的一个问题是:某个range内的记录数量很多,这就会导致相应的数据分片比较大,一般也叫做数据倾斜。对这个数据分片的访问量也可能大,导致负载不均衡。 基于记录key进行哈希后再取模,好处是能把数据打得比较散,不太容易引起数据倾斜,还是为了访问时请求负载能在不同数据分片分布地均衡些,提高访问性能。
作者回复: 切片集群中每个切片可以配置从库,也可以不配置。不过一般生产环境中还是建议对每个切片做主从配置。 可以使用cluster replicate命令进行配置。
作者回复: 回答的挺好,对hash算法可用于打散键值对分布的理解到位!
作者回复: 这个笔记整理得不错,层次分明!
作者回复: 其实,如果用表来记录映射关系的话,就不用计算哈希值了,所以这个时候倒没有hash冲突了。不过,如果有实例下线,的确会涉及大量数据迁移,和映射关系变化,如果用表记录的话,对表的修改就会比较麻烦。 感觉你说的hash冲突,是不是和Redis Cluster里的哈希槽使用有些混淆了? :)
作者回复: 对于复杂类型的value来说,key也一样会做分片的。这个key是指复杂类型本身的key,并不是value集合内部的key(例如Hash集合内部的key)。