【Redis】- Redis Cluser 之数据分布
数据分布
简述
分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集
分区及限制
分区规则
常见的分区规则顺序分区哈希分区,
Redis Cluser
使用此种分区规则
哈希分区和顺序分区对比
分布式存储数据分区图
① 哈希分区类型
节点取余分区
一致性哈希分区
虚拟槽分区,
Redis Cluser
使用此种分区类型
② Redis
数据分区
Redis Cluser
采用虚拟槽分区, 所有的键根据哈希函数映射到0~16383
整数槽内, 计算公式:slot=CRC16(key) &16383
。 每一个节点负责维护一部分槽以及槽所映射的键值数据特点解耦数据和节点之间的关系, 简化了节点扩容和收缩难度节点自身维护槽的映射关系, 不需要客户端或者代理服务维护槽分区元数据支持节点、 槽、 键之间的映射查询, 用于数据路由、 在线伸缩等场景使用 CRC16(key) &16383 将键映射到槽上
③ Redis
集群功能限制
Redis
集群相对单机在功能上存在一些限制key
批量操作支持有限。如mset
、mget
, 目前只支持具有相同slot
值的key
执行批量操作。 对于映射为不同slot
值的key
由于执行mget
、mget
等操作可能存在于多个节点上因此不被支持key
事务操作支持有限,只支持多key
在同一节点上的事务操作,当多个key
分布在不同的节点上时无法使用事务功能key
作为数据分区的最小粒度, 因此不能将一个大的键值对象如hash
、list
等映射到不同的节点不支持多数据库空间,单机下的Redis
可以支持16
个数据库, 集群模式下只能使用一个数据库空间, 即db0
复制结构只支持一层, 从节点只能复制主节点, 不支持嵌套树状复制结构
总结
数据分区是分布式存储的核心, 理解和灵活运用数据分区规则对于掌握
Redis Cluster
非常有帮助
评论 (1 条评论)