跳到主要内容
DevOpsMar 28, 2026

Deep EVM #26:分片 vs 分区——大表架构方案

OS
Open Soft Team

Engineering Team

分区 vs 分片:核心区别

  • 分区 — 单个数据库内的表分割。数据仍在同一台服务器上。
  • 分片 — 跨多台数据库服务器分布数据。每个分片是独立的数据库实例。

何时使用分区

  • 表太大导致查询慢,但单服务器容量足够
  • 需要按时间范围归档旧数据
  • 查询模式与分区键对齐

何时使用分片

  • 单服务器无法承载写入负载
  • 数据量超过单机存储能力
  • 需要地理分布以降低延迟

一致性哈希

一致性哈希是分片路由的基础算法,确保在添加或移除分片时最小化数据迁移:

fn get_shard(key: &str, num_shards: u32) -> u32 {
    let hash = murmur3_x64_128(key.as_bytes(), 0);
    (hash % num_shards as u128) as u32
}

分片路由

应用层需要知道数据在哪个分片上。常见模式:

  • 路由表
  • 哈希函数
  • 范围映射

决策框架

因素分区分片
复杂性
写入扩展有限线性
跨分片查询不适用昂贵
运维开销

总结

先分区,后分片。大多数应用程序通过分区即可满足需求。只有在单服务器确实成为瓶颈时才考虑分片。