Database Sharding 和 Partitioning Reference
Reference 为 horizontal sharding, vertical partitioning, 和 distributed 数据库 strategies.
Partitioning Strategies
Horizontal partitioning (sharding) splits rows across nodes by a shard key. Vertical partitioning splits columns (e.g., hot columns separate from cold). Range partitioning assigns by key ranges (e.g., date ranges). Hash partitioning distributes by hash(key) for even distribution. List partitioning assigns by explicit key values. Composite partitioning combines strategies (e.g., hash then range). The shard key choice is critical and hard to change later. Cross-shard queries are expensive; design for shard-local access.
- horizontal
- Split rows
- hash
- Even distribution
- range
- Key ranges
sharding hash(key) % N date-based Sharding Challenges
Distributed joins across shards are expensive or impossible. Distributed transactions require 2PC or Saga patterns. Rebalancing (adding/removing shards) requires data migration. Hotspots occur if shard key is uneven (e.g., all traffic to one shard). Secondary indexes are per-shard; global indexes add overhead. Consistency varies: strong (spanner, CockroachDB) vs eventual (Cassandra). Connection routing requires a shard-aware proxy or driver. Sharding is a last resort after vertical scaling, read replicas, and caching. Vitess, Citus, and CockroachDB provide sharding solutions.
- cross-shard
- Expensive joins
- rebalance
- Data migration
- hotspot
- Uneven distribution
avoid expensive bad shard key