写点什么

【Redis】- Redis Cluser 之数据分布

用户头像
双木之林
关注
发布于: 2021 年 01 月 20 日
【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非常有帮助


用户头像

双木之林

关注

还未添加个人签名 2020.05.09 加入

互联网金融开发工程师

评论 (1 条评论)

发布
用户头像
2021 年 01 月 20 日 14:32
回复
没有更多了
【Redis】- Redis Cluser之数据分布