每一条数据都属于特定的分区,每个分区都是一个小型数据库。

目的

提高扩展性,分散大的数据集和查询负载。

目标

将数据和查询负载均匀的分步在所有节点上。如果分布不均匀会出现负载倾斜系统热点

数据分区与数据复制

结合数据复制每个分区在多个节点都有副本,进行冗余提高可用性。

键-值数据的分区

避免系统热点最简单的方法是将记录随机分配给所有节点上,缺点是:没办法知道数据保存在哪个节点上,所以读取时需要查询所有节点。

基于关键字区间分区

基于关键字哈希值分区

负载倾斜系统热点

分区与二级索引

二级索引不能唯一标识一条记录,比如查询颜色为红色的汽车。二级索引带来的主要挑战是它们不能规整的映射到分区中。

有两种方法来支持对二级索引进行分区:

分区再平衡

请求路由

策略

  1. 客户端可以连接任意节点,并由节点做转发不在当前节点的分区请求。
  2. 由路由层来充当分区感知的负载均衡器。
  3. 客户端直接感知分区和节点分配关系,客户端直连目标节点。

做出路由决策的组件

  • Zookeeper
  • gossip 协议