샤드 부하 불균형(최대 샤드) 계산기
키를 해시로 고르게 뿌려도 가장 무거운 샤드는 평균보다 무겁습니다. n/m + √(2·(n/m)·ln m)라는 어림으로 최대 부하를 구하고, 실제로 뿌려 보는 시뮬레이션과 대조해 용량을 얼마나 여유 있게 잡아야 하는지 보여 줍니다.
가장 무거운 샤드의 예상 부하
15,986개
평균은 15,625개인데 가장 무거운 샤드는 그보다 2.3% 무거울 것으로 추정됩니다. 용량은 평균이 아니라 이 값으로 잡아야 합니다.
문턱은 「이 값을 넘는 샤드의 기대 개수가 1 아래로 떨어지는 첫 정수」입니다. 어림식과 서로 다른 길로 구한 값이라 정확히 같지는 않지만 가까이 나와야 맞습니다. 시뮬레이션은 키가 너무 많아 샤드마다 정규근사로 뽑은 것이고 씨앗을 고정해 같은 입력이면 같은 값이 나옵니다.
한 판의 샤드별 부하 (앞 40개)
해시가 완벽해도 이만큼 들쭉날쭉합니다. 막대 높이의 차이는 해시가 나빠서가 아니라 유한한 개수를 무작위로 나누면 원래 생기는 것입니다.
샤드를 늘리면 어떻게 되나
| 샤드 | 평균 부하 | 예상 최대 | 상대 불균형 |
|---|---|---|---|
| 2 | 500,000 | 500,832.6 | +0.2% |
| 4 | 250,000 | 250,832.6 | +0.3% |
| 8 | 125,000 | 125,721 | +0.6% |
| 16 | 62,500 | 63,088.7 | +0.9% |
| 32 | 31,250 | 31,715.4 | +1.5% |
| 64 | 15,625 | 15,985.5 | +2.3% |
| 128 | 7,812.5 | 8,087.8 | +3.5% |
| 256 | 3,906.3 | 4,114.4 | +5.3% |
| 512 | 1,953.1 | 2,109.2 | +8% |
| 1024 | 976.6 | 1,092.9 | +11.9% |
평균은 계속 줄지만 상대 불균형은 계속 커집니다. 잘게 쪼갤수록 샤드마다 더 큰 여유를 둬야 한다는 뜻이며, 무한정 쪼개는 것이 답이 아닌 이유입니다.
사용 방법
- 1키 개수와 샤드 개수를 넣습니다.
- 2가장 무거운 샤드의 예상 부하와 평균 대비 초과 비율을 확인합니다.
- 3시뮬레이션 결과가 어림식과 비슷하게 나오는지 대조합니다.
- 4막대그림에서 완벽한 해시로도 부하가 얼마나 들쭉날쭉한지 봅니다.
- 5아래 표에서 샤드를 늘릴 때 상대 불균형이 오히려 커지는 것을 확인합니다.
자주 묻는 질문
유한한 개수를 무작위로 나누면 원래 생기는 흔들림 때문입니다. 동전을 아무리 잘 던져도 앞면이 정확히 절반이 나오지 않는 것과 같습니다. 샤드 하나의 부하는 이항분포 B(n, 1/m)이고 표준편차가 √(n/m)쯤이라, 샤드가 많을수록 그 가운데 가장 큰 값이 평균에서 더 멀리 떨어집니다.
샤드당 키가 넉넉하면 n/m + √(2·(n/m)·ln m)쯤입니다. 「λ+x를 넘는 샤드의 기대 개수 m·exp(−x²/2λ)가 1이 되는 x」에서 나온 값입니다. 키 100만 개를 64개 샤드에 뿌리면 평균 15,625개에 최대는 16,000개 남짓으로 약 2.3% 더 무겁습니다.
반대입니다. 평균 부하는 줄지만 상대 불균형은 커집니다. 초과분을 평균으로 나누면 √(2 ln m / λ)인데 샤드를 늘리면 λ = n/m이 줄어 이 비가 커지기 때문입니다. 잘게 쪼갤수록 샤드마다 더 큰 여유를 둬야 합니다.
안 됩니다. 모든 샤드가 같은 크기의 기계에 올라간다면 가장 무거운 샤드가 들어가야 전체가 돕니다. 평균으로 잡으면 절반 가까운 샤드가 넘치며, 규모가 커질수록 「어딘가 하나는 많이 튄다」가 확실해집니다.
해시로는 못 고칩니다. 특정 키 하나가 전체 트래픽의 10%를 먹는다면 그 키가 어느 샤드로 가든 그 샤드가 10%를 집니다. 해시는 키를 고르게 흩뿌릴 뿐 키 자체의 치우침을 없애지 못하므로, 그때는 샤드를 늘리는 대신 키를 쪼개거나 앞에 캐시를 둬야 합니다.
식이 달라집니다. n ≈ m처럼 성긴 영역에서는 정규근사가 무너지고 최대 부하가 ln m / ln ln m 규모가 됩니다. 샤드 1000개에 키 1000개를 뿌리면 평균은 1인데 가장 무거운 곳에는 5~6개가 들어가 상대 불균형이 수백 %가 됩니다.
다루는 문제가 다릅니다. 이 도구는 이미 고르게 뿌려졌다고 보고 그때의 부하 불균형만 봅니다. 「어느 샤드로 보낼까」와 「샤드를 더하거나 뺄 때 얼마나 옮겨야 하는가」는 일관성 해싱·랑데부 해싱이 다루는 주제입니다.
전송되지 않습니다. 계산과 시뮬레이션 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.
알아두면 좋은 점
- 키마다 무게가 같다고 봅니다. 실제 부하가 키마다 다르면(핫키·지프 분포) 이 계산보다 훨씬 심하게 치우칩니다.
- 해시가 균등하다고 봅니다. 해시 함수가 나쁘거나 키에 구조가 있으면 별개의 문제입니다.
- 어림식은 정확한 기댓값이 아니라 「대략 어디쯤인가」입니다. 실제 값이 궁금하면 시뮬레이션 쪽을 보세요.
- 키가 아주 많으면 시뮬레이션이 정규근사로 넘어갑니다. 합이 정확히 키 개수가 되지는 않지만 최대 부하의 크기를 보는 데는 충분합니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.