Quick Comparison
partitioning: 데이터를 key 기준의 부분으로 나누는 일반 개념
table partitioning: 한 database가 여러 physical partition을 하나의 table처럼 관리
sharding: 보통 horizontal partition을 여러 database node에 분산PostgreSQL table partitioning은 한 server 또는 cluster 내부의 table 관리 기능이며 그 자체가 일반적인 분산 sharding을 뜻하지 않습니다. Sharding에는 routing, cross-shard query, rebalance, replication과 부분 장애 운영이 추가됩니다.
Key 선택
시간 range partition은 오래된 데이터를 빠르게 보관·삭제하는 데 유리할 수 있습니다. Hash partition은 key 분포가 균등하면 부하를 나누기 쉽지만 range query가 여러 partition을 건널 수 있습니다.
Game player ID를 shard key로 쓰면 한 player의 데이터는 모으기 쉽지만 guild, ranking, market처럼 여러 player를 묶는 query는 cross-shard가 될 수 있습니다. 가장 자주 쓰는 query와 transaction 경계를 먼저 봅니다.
운영 비용
Hot key가 생기면 shard 수가 많아도 특정 node만 과부하될 수 있습니다. Rebalancing 중 data 이동과 dual routing, 실패 복구, shard map version을 관리해야 합니다.
Application-level sharding은 모든 query에 routing 책임을 노출할 수 있습니다. Database 또는 proxy가 제공하는 분산 기능과 요구사항을 비교합니다.
자주 틀리는 점
- Sharding을 backup이나 replication 대체로 보지 않습니다.
- Partition 수를 처음부터 지나치게 크게 잡지 않습니다.
- Cross-shard transaction 비용을 설계에서 제외하지 않습니다.
- 균등한 row 수와 균등한 traffic이 같은 뜻은 아닙니다.
참고 링크
2 sources