도구스개발

쿠쿠 필터 크기 계산기

원소 수와 목표 오탐률에서 지문 비트 수와 필요한 메모리를 구하고 블룸 필터와 견줍니다. 블룸이 못 하는 삭제가 되는 대신 적재율 한계 때문에 그 위로는 삽입이 실패한다는 것을 숫자로 확인할 수 있습니다.

%

「없는데 있다고 답할」 확률입니다. 있는데 없다고 답하는 일은 없습니다.

칸이 많을수록 더 꽉 채울 수 있지만(적재율 95%) 지문이 길어집니다.

필요한 메모리

3.3MB

지문 13비트짜리 칸 2,097,152개입니다. 같은 오탐률의 블룸 필터는 1.7MB이므로, 이론 크기로는 쿠쿠가 더 작습니다.

지문 비트 f = ⌈log₂(2b/ε)⌉13비트 (계산값 12.97)
올림 뒤 실제 오탐률0.09766%
적재율 한계 α95%
이론 칸 수 ⌈n/α⌉1,052,632개
실제 칸 수 (버킷 2의 거듭제곱)2,097,152개 · 버킷 524,288개
올림 때문에 늘어난 배수1.99배

원소당 비트로 견주면

쿠쿠 (이론 크기)13.68비트
쿠쿠 (실제 할당)27.26비트
블룸14.38비트
쿠쿠 ÷ 블룸 (이론)0.95배

블룸과 견줄 때는 이론 크기를 봅니다. 실제 할당이 그보다 큰 것은 버킷 수를 2의 거듭제곱으로 올려야 하기 때문인데, 이는 두 번째 자리를 「첫 자리 XOR 지문해시」로 구하는 쿠쿠 필터의 수법이 그 조건에서만 성립해서입니다. 원소 수가 어디에 걸리느냐에 따라 이 올림이 거의 두 배까지 됩니다.

오탐률에 따라 누가 이기나

오탐률쿠쿠블룸이기는 쪽
10%7.44.8블룸
1%10.59.6블룸
0.1%13.714.4쿠쿠
0.01%17.919.2쿠쿠
0.001%21.124쿠쿠
0.0001%24.228.8쿠쿠

오탐률이 약 0.0841%보다 낮아지면 쿠쿠가 작아집니다. 블룸은 원소당 1.44·log₂(1/ε)비트가 드는 데 비해 쿠쿠는 (log₂(2b)+log₂(1/ε))/α비트라, ε이 작아질수록 계수 1.44와 1/0.95의 차이가 상수항을 이깁니다.

쿠쿠 필터의 존재 이유는 삭제입니다. 블룸 필터는 여러 원소가 비트를 공유해서 비트를 0으로 되돌리면 다른 원소까지 지워지지만, 쿠쿠 필터는 원소마다 지문 한 덩어리가 통째로 들어 있어 그 덩어리만 빼면 됩니다. 다만 넣은 적 없는 원소를 지우면 남의 지문을 지울 수 있으므로, 「넣은 것만 지운다」가 지켜져야 합니다.
대신 적재율 한계가 있습니다. 밀어내기가 끝없이 이어질 수 있어 시도 횟수에 상한을 두는데, 그 상한에 걸리면 삽입이 실패합니다. 버킷당 칸이 4개면 약 95%까지 차고 그 위로는 넣지 못합니다. 블룸 필터는 아무리 넣어도 실패가 없고 오탐률만 나빠지는 것과 다릅니다 — 쿠쿠 필터를 쓰려면 담을 원소 수를 미리 알아야 합니다.
적재율 한계값은 무작위 해시를 가정한 점근값이라 자료마다 소수점 아래가 조금씩 다릅니다. 여기서는 널리 인용되는 값(b=1은 50%, b=2는 84%, b=4는 95%, b=8은 98%)을 썼습니다. 실제 구현에서는 여유를 조금 더 두는 것이 안전합니다.

사용 방법

  1. 1담을 원소 수를 넣습니다.
  2. 2목표 오탐률을 정합니다. 아래 칩으로 흔히 쓰는 값을 고를 수 있습니다.
  3. 3버킷당 칸 수 b를 고릅니다. 4가 실전에서 가장 흔합니다.
  4. 4「원소당 비트로 견주면」에서 블룸 필터와 크기를 대봅니다.
  5. 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일 · 결과는 참고용 추정치입니다.