쿠쿠 필터 크기 계산기
원소 수와 목표 오탐률에서 지문 비트 수와 필요한 메모리를 구하고 블룸 필터와 견줍니다. 블룸이 못 하는 삭제가 되는 대신 적재율 한계 때문에 그 위로는 삽입이 실패한다는 것을 숫자로 확인할 수 있습니다.
「없는데 있다고 답할」 확률입니다. 있는데 없다고 답하는 일은 없습니다.
칸이 많을수록 더 꽉 채울 수 있지만(적재율 95%) 지문이 길어집니다.
필요한 메모리
3.3MB
지문 13비트짜리 칸 2,097,152개입니다. 같은 오탐률의 블룸 필터는 1.7MB이므로, 이론 크기로는 쿠쿠가 더 작습니다.
원소당 비트로 견주면
블룸과 견줄 때는 이론 크기를 봅니다. 실제 할당이 그보다 큰 것은 버킷 수를 2의 거듭제곱으로 올려야 하기 때문인데, 이는 두 번째 자리를 「첫 자리 XOR 지문해시」로 구하는 쿠쿠 필터의 수법이 그 조건에서만 성립해서입니다. 원소 수가 어디에 걸리느냐에 따라 이 올림이 거의 두 배까지 됩니다.
오탐률에 따라 누가 이기나
| 오탐률 | 쿠쿠 | 블룸 | 이기는 쪽 |
|---|---|---|---|
| 10% | 7.4 | 4.8 | 블룸 |
| 1% | 10.5 | 9.6 | 블룸 |
| 0.1% | 13.7 | 14.4 | 쿠쿠 |
| 0.01% | 17.9 | 19.2 | 쿠쿠 |
| 0.001% | 21.1 | 24 | 쿠쿠 |
| 0.0001% | 24.2 | 28.8 | 쿠쿠 |
오탐률이 약 0.0841%보다 낮아지면 쿠쿠가 작아집니다. 블룸은 원소당 1.44·log₂(1/ε)비트가 드는 데 비해 쿠쿠는 (log₂(2b)+log₂(1/ε))/α비트라, ε이 작아질수록 계수 1.44와 1/0.95의 차이가 상수항을 이깁니다.
사용 방법
- 1담을 원소 수를 넣습니다.
- 2목표 오탐률을 정합니다. 아래 칩으로 흔히 쓰는 값을 고를 수 있습니다.
- 3버킷당 칸 수 b를 고릅니다. 4가 실전에서 가장 흔합니다.
- 4「원소당 비트로 견주면」에서 블룸 필터와 크기를 대봅니다.
- 5「오탐률에 따라 누가 이기나」 표에서 두 자료구조가 갈리는 지점을 찾습니다.
자주 묻는 질문
삭제가 됩니다. 블룸 필터는 여러 원소가 같은 비트를 공유해서 비트를 0으로 되돌리면 다른 원소까지 지워지지만, 쿠쿠 필터는 원소마다 지문 한 덩어리가 통째로 들어 있어 그 덩어리만 빼면 됩니다. 이것이 이 자료구조의 존재 이유입니다.
f ≈ ⌈log₂(2b/ε)⌉입니다. b는 버킷당 칸 수, ε은 목표 오탐률입니다. 오탐은 찾는 지문과 같은 지문이 두 버킷 2b칸 어딘가에 우연히 들어 있는 경우이고, 지문이 f비트면 한 칸이 우연히 맞을 확률이 2^−f이므로 ε ≈ 2b/2^f가 됩니다. b=4에 ε=1%면 10비트입니다.
어느 선 이상 채우면 삽입이 실패한다는 뜻입니다. 넣을 자리가 둘 다 차 있으면 기존 지문을 쫓아내 그 지문의 다른 자리로 미는데, 이 밀어내기가 끝없이 이어질 수 있어 시도 횟수에 상한을 둡니다. 그 상한에 걸리면 넣지 못합니다. 버킷당 칸이 1개면 약 50%, 2개면 84%, 4개면 95%, 8개면 98%까지 찹니다.
아닙니다. 블룸 필터는 아무리 넣어도 삽입이 실패하지 않고 오탐률만 서서히 나빠집니다. 쿠쿠 필터는 어느 선을 넘으면 아예 넣지 못하므로, 담을 원소 수를 미리 알고 칸을 넉넉히 잡아야 합니다. 그 여유분이 곧 메모리 낭비이며, 이 계산기가 원소 수를 적재율로 나눠 칸 수를 잡는 이유입니다.
오탐률이 아주 낮을 때입니다. 블룸은 원소당 1.44·log₂(1/ε)비트가 들고 쿠쿠는 (log₂(2b)+log₂(1/ε))/α비트가 드는데, ε이 작아질수록 계수 1.44와 1/α ≈ 1.05의 차이가 상수항 log₂(2b)를 이깁니다. b=4일 때 교차점이 대략 0.08% 언저리이고, b=1은 적재율이 50%밖에 안 되어 어떤 오탐률에서도 블룸을 이기지 못합니다.
두 번째 자리를 「첫 자리 XOR 지문해시」로 구하기 때문입니다. 이 XOR 결과가 버킷 범위 안에 떨어지려면 버킷 수가 2의 거듭제곱이어야 합니다. 그래서 실제로 잡는 칸 수는 계산값을 2의 거듭제곱으로 올린 값이고, 원소 수가 어디에 걸리느냐에 따라 이 올림이 거의 두 배까지 됩니다. 이 계산기는 이론 크기와 실제 할당을 따로 냅니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 지문 비트 수는 f = ⌈log₂(2b/ε)⌉로 구하고, 올림한 뒤의 실제 오탐률 2b/2^f를 함께 냅니다. 올림했으므로 실제 오탐률은 목표보다 좋거나 같습니다.
- 블룸 필터 쪽 값은 블룸 필터 계산기와 같은 코드(src/lib/calc/bloomFilter.ts)를 씁니다. 두 도구의 숫자가 어긋나지 않게 하려는 것입니다.
- 적재율 한계값(b=1은 50%, b=2는 84%, b=4는 95%, b=8은 98%)은 무작위 해시를 가정한 점근값입니다. 자료마다 소수점 아래가 조금씩 다르므로 실제 구현에서는 여유를 더 두는 것이 안전합니다.
- 블룸과의 비교는 이론 크기(원소 수 ÷ 적재율 × 지문 비트)로 합니다. 실제 할당은 버킷 수를 2의 거듭제곱으로 올려야 해서 최대 두 배까지 커지는데, 이 올림 배수를 따로 보이고 모든 조합에서 1배 이상 2배 미만인 것을 테스트로 고정해 두었습니다.
- 교차점은 이분법으로 찾습니다. 지문 비트를 올림하기 때문에 이론식으로 푼 값과 조금 어긋나며, b=4에서 약 0.08%입니다. b=1은 적재율 손해가 커서 교차점이 아예 없습니다.
- 같은 원소를 두 번 넣었다면 삭제도 두 번 해야 합니다. 넣은 적 없는 원소를 지우면 남의 지문을 지울 수 있어, 「넣은 것만 지운다」가 지켜져야 하는 자료구조입니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.