可以基于关键值哈希函数的方式分区,解决基于关键字区间分区数据倾斜与热点的问题。一个好的哈希函数可以处理数据倾斜并使其均匀分布,并且不需要在加密方面很强。
优点
这种方法可以很好的将关键字均匀分配到多个分区中。
缺点
丧失良好的区间查询性能。即使关键字相邻,也会分布在不同的分区上。
可以基于关键值哈希函数的方式分区,解决基于关键字区间分区数据倾斜与热点的问题。一个好的哈希函数可以处理数据倾斜并使其均匀分布,并且不需要在加密方面很强。
这种方法可以很好的将关键字均匀分配到多个分区中。
丧失良好的区间查询性能。即使关键字相邻,也会分布在不同的分区上。
负载倾斜会导致所有负载都集中在一个分区节点上,这种负载严重不成比例的分区即称为系统热点。 应用层解决 即使通过基于关键字哈希值分区和基于关键字区间分区等策略解决了大部分热点问题,但是极端情况下依然会出现热点,比如社交媒体的热点时间都会导致热点,只能通过应用层解决,一个简单的技术: 关键字开头或结尾添加一个随机数,两位随机数就可以将关键字的写操作分布到 100 个不同的分区上; 读取就必须从所有的 1000 个关键字中读取数据然后进行合并; 通过额外的元数据标记哪些关键字进行了特殊处理。 由于对读取造成的额外开销,所以通常只有对少量的热点关键词附加随机数才有意义。
每一条数据都属于特定的分区,每个分区都是一个小型数据库。 目的 提高扩展性,分散大的数据集和查询负载。 目标 将数据和查询负载均匀的分步在所有节点上。如果分布不均匀会出现负载倾斜和系统热点。 数据分区与数据复制 结合数据复制每个分区在多个节点都有副本,进行冗余提高可用性。 键-值数据的分区 避免系统热点最简单的方法是将记录随机分配给所有节点上,缺点是:没办法知道数据保存在哪个节点上,所以读取时需要查询所有节点。 基于关键字区间分区 基于关键字哈希值分区 负载倾斜与系统热点 分区与二级索引 二级索引不能唯一标识一条记录,比如查询颜色为红色的汽车。二级索引带来的主要挑战是它们不能规整的映射到分区中。 有两种方法来支持对二级索引进行分区: 基于文档分区的二级索引 基于词条的二级索引分区 分区再平衡 动态再平衡策略 自动与手动再平衡操作 请求路由 策略 客户端可以连接任意节点,并由节点做转发不在当前节点的分区请求。 由路由层来充当分区感知的负载均衡器。 客户端直接感知分区和节点分配关系,客户端直连目标节点。 做出路由决策的组件 Zookeeper gossip 协议