logo
Database Design

database分片

联合与分片的database拆分策略

在讨论 sharding 之前,先看 data partitioning:

Data Partitioning

Data partitioning 是把一个 database 拆成多个更小部分的技术。它把 database 或 table 分布到多台机器上,以提升可管理性、performance 与 availability。

Methods

常见拆分方式:

Horizontal Partitioning (Sharding)

partition key 的范围把表行横向拆分,通常就叫 database sharding

Vertical Partitioning

按 columns 纵向拆分,把表拆成多个字段更少的小表,分布在不同 partitions。

本节重点讨论 sharding。

什么是 sharding?

Sharding 是一种与 horizontal partitioning 相关的 database 架构模式,把同一张表的 rows 拆到多个 partitions(或 shards)。每个 partition 的 schema 与 columns 一致,但只包含数据子集。各 partition 的数据相互独立。

sharding

Sharding 的核心理由是:当规模到一定程度时,横向扩展(加机器)比纵向扩展(升机器)更经济可行。Sharding 可以在 application 层或 database 层实现。

Partitioning criteria

常见分片策略:

Hash-Based

使用 hash 算法决定分片,而不是按连续范围分组。

缺点:动态增删 servers 成本高。

List-Based

按某个 column 的值列表分配到分片,而不是连续范围。

Range Based

按 partitioning key 的取值范围映射到 partitions。每个 partition 覆盖一个连续范围,范围之间不重叠。

Composite

组合分片:先用一种策略分片,再对每个分片做子分片。

Advantages

为什么需要 sharding:

  • Availability:各分片逻辑独立,便于单独管理,提高 availability。
  • Scalability:数据分散在多个 partitions,提高 scalability。
  • Security:敏感/非敏感数据分开存,提升安全与可管理性。
  • Query Performance:查询只需扫更小分片,性能更好。
  • Data Manageability:表与 index 更小、更易维护。

Disadvantages

  • Complexity:系统复杂度显著增加。
  • Cross-shard joins:跨 shard 的 join 成本高且难以高效执行。
  • Rebalancing:数据分布不均或热点 shard 需要重新均衡。

什么时候用 sharding?

  • 利用现有硬件,而不是购买高端机器。
  • 数据需要按地理区域分布。
  • 需要快速扩展,直接加 shards。
  • 单机负载过高、性能瓶颈明显。
  • 需要更多并发连接。

相关练习题

database分片

暂无相关练习题