跳到主要内容

数据分区与分片

水平分区与垂直分区如何拆数据?​

  • 数据分区: 按规则把数据分成较小部分,便于管理、查询和扩展,不一定每个分区都在独立机器;
  • 水平分区: 按行拆分,同类分区保持相似结构,每个分区存部分记录;
  • 分片: 通常指把水平分区分布到多个节点,各节点承担不同数据的存储与请求;
  • 垂直分区: 按列拆分,例如把频繁访问的核心属性与很大的扩展内容分开;
  • 采用时机: 已确认单机容量、连接数、地理部署或吞吐限制,而复制与查询优化不能解决主要瓶颈;

怎样选择分区键与分区规则?​

方法路由规则优点代价
哈希对分区键做哈希映射容易打散普通键简单取模扩容迁移多,范围查询易跨片
列表指定值属于指定分区业务位置直观热门值可能压垮一片
范围落入连续区间范围扫描方便新增或热门区间可能集中写入
复合先按一种规则再细分兼顾多种访问约束路由与运维更复杂
  • 边界约定: 范围必须明确包含关系,例如 [a,b),既不重叠也不遗漏边界值;
  • 查询局部性: 选择能让常用操作落在同一分片的键,避免每次查询都广播全库;
  • 基数与热点: 键很多并不代表负载均匀,某个热门用户仍可能独占大量请求;

分片带来的收益有哪些边界?​

  • 扩展: 不同分片可并行工作,减小单节点数据量与索引规模;
  • 管理: 可以按分片迁移、维护和安排地理位置,也可以配合权限隔离敏感数据;
  • 查询: 只有能定位目标分片时才明显缩小扫描,无法裁剪分片的查询未必更快;
  • 可用性: 分片隔离部分故障,但只有一份数据的分片失效仍会使相应数据不可用,需另加复制;
  • 安全: 分开保存有助于管理,不会自动替代身份验证、授权和加密;

跨片操作为什么更昂贵?​

  • 联接: 需要跨网络取数和合并,可能传输大量中间结果;
  • 事务: 跨片约束和更新需要协调或补偿,见 分布式事务;
  • 聚合: 全局统计和排序需要多片参与,不能用单片性能直接推断整体性能;

分片扩容时如何重新平衡数据?​

  • 再平衡: 当分布不均或容量变化时迁移数据,并更新客户端使用的路由信息;
  • 迁移一致性: 迁移过程中需定义旧位置、新位置与并发写的处理方式,避免遗漏或重复;
  • 一致性哈希: 可以减少节点变化时受影响的键,具体机制见 一致性哈希;
  • 限制: 哈希分布均匀不能解决单个超级热点键,也不保证业务地理分布自动均匀;