数据分区
每一条数据都属于特定的分区,每个分区都是一个小型数据库。
目的⌗
提高扩展性,分散大的数据集和查询负载。
目标⌗
将数据和查询负载均匀的分步在所有节点上。如果分布不均匀会出现负载倾斜和系统热点。
数据分区与数据复制⌗
结合数据复制每个分区在多个节点都有副本,进行冗余提高可用性。
键-值数据的分区⌗
避免系统热点最简单的方法是将记录随机分配给所有节点上,缺点是:没办法知道数据保存在哪个节点上,所以读取时需要查询所有节点。
基于关键字区间分区⌗
基于关键字哈希值分区⌗
负载倾斜与系统热点⌗
分区与二级索引⌗
二级索引不能唯一标识一条记录,比如查询颜色为红色的汽车。二级索引带来的主要挑战是它们不能规整的映射到分区中。
有两种方法来支持对二级索引进行分区:
分区再平衡⌗
- 动态再平衡策略
- 自动与手动再平衡操作
请求路由⌗
策略⌗
- 客户端可以连接任意节点,并由节点做转发不在当前节点的分区请求。
- 由路由层来充当分区感知的负载均衡器。
- 客户端直接感知分区和节点分配关系,客户端直连目标节点。
做出路由决策的组件⌗
- Zookeeper
- gossip 协议