Bloom 필터 요약
4724 단어 Bloom filter
Bloom filter 는 최초 로 Burton Howard Bloom 이 제기 한 것 으로 구성원 이 특정한 집합 에 존재 하 는 지 여 부 를 판단 하 는 데이터 구조 이다.Bloom filter 의 판단 은 확률 론 에 기초 합 니 다.
Bloom filter 는 보통 m 비트 를 포함 하 는 비트 그룹 (bit array) 으로 구현 되 며, 모든 비트 의 초기 값 은 0 입 니 다.Bloom filter 는 다음 두 가지 유형의 작업 을 지원 합 니 다.
Bloom filter 에서 사용 하 는 k 개의 index functions 는 hash functions 라 고도 부 릅 니 다. 이들 은 보통 서로 독립 된 것 으로 가정 되 고 반환 값 은 가능 한 수치 범위 내 에서 균일 하 게 분포 되 어 있 습 니 다 (이것 은 다음 과 같은 일련의 수학 적 증명 의 기초 입 니 다).
2 The Math
Bloom filter 의 기본 개념 은 복잡 하지 않 습 니 다. 다음은 query 작업 이 추가 되 지 않 은 구성원 에 게 positive (즉 false positive) 로 돌아 갈 확률 을 분석 하 겠 습 니 다.
p 가 자릿수 그룹 중 한 명 이 1 일 확률 이 라 고 가정 하면 false positive 의 확률 은 pk 입 니 다. n 이 Bloom filter 에 추 가 된 멤버 개수 라면 p = 1 – (1 – 1 / m) nk 는 일련의 추 도 를 통 해 p 개 월 (1 – e - kn / m) k 를 얻 을 수 있 습 니 다. k = m / n * ln2 일 때 (ln 즉 loge), p 는 최소 값 입 니 다. 예 를 들 어 k = 8, m / n = 10 시 false positive 의 이론 값 은 0.00846 입 니 다. 다음은 false positive 를 계산 하 는 인 스 턴 스 코드 입 니 다.
public static double calculateFalsePositiveProbability(int k, int m, int n) {
return Math.pow((1 - Math.exp(-k * (double) n / (double) m)), k);
}
일부 응용 에 있어 서 false positive 의 확률 은 Bloom filter 의 정확성 을 충분히 판단 하 는 지표 이다. Peter C. Dillinger 와 Panagiotis Manolios 는 Bloom Filters in Probablistic Verfification 논문 에서 query 과정 에서 의 불확실 성에 대해 state omission 은 더욱 적합 한 지표 라 고 지적 했다. 관심 있 는 독자 들 이 이 이론 을 읽 는 것 을 권장 한다.글, 수학 지식 도 복습 할 수 있 습 니 다.
3 Refinement
So far, so good. 일반적인 HashMap 에 비해 Bloom filter 는 메모리 에 key 와 value 를 저장 하지 않 고 자릿수 그룹 에 있 는 몇 개의 비트 를 저장 하면 됩 니 다. 이것 은 메모리 사용 에 있어 서 큰 절약 입 니 다. 물론 전 제 는 일정한 확률 의 false positives 를 용인 하 는 것 입 니 다. 그러나 전 통 된 Bloom filter 는 다음 과 같은 두 가지 심각 한 결함 이 있 습 니 다.
4 Implementation
Google 이 자바 로 구현 하 는 Bloom filter 라면 자바 - bloomfilter 는 가장 쉽게 찾 을 수 있 는 구현 중 하나 일 수 있 습 니 다. 기 존의 Bloom filter 알고리즘 을 사용 합 니 다. k 개의 색인 함수 (기본 값 은 MD5) 를 사용 합 니 다. 색인 함수 가 계산 할 때 인자 의 소금 (salting) 을 다 를 뿐 입 니 다. 필 자 는 자바 - bloomfilter 의 성능 이 향상 되 어야 한다 고 생각 합 니 다.
Hadoop common 의 util 패키지 에 도 Bloom Filter 의 실현 을 제공 합 니 다. 또한 hash 패 키 지 는 Jenkins Hash 와 MurmurHash 두 개의 Hash 알고리즘 을 제공 합 니 다. 필 자 는 Hadoop 의 Bloom filter 의 실현 방식 이 fingerprinting Bloom filter 와 유사 하 다 고 생각 하지만 double hashing 이나 triple hashing 을 사용 하지 않 았 습 니 다.
또한, 자릿수 그룹의 실현 방식 에 대해 서 는 자바 util. bitset 를 사용 하 는 것 이 가장 직접적인 생각 일 수 있 습 니 다. 그러나 필 자 는 처리 한 데이터 의 양 이 많 거나 성능 에 대한 요구 가 높 으 면 자바 util. bitset 를 사용 하 는 것 을 권장 하지 않 습 니 다. 자바 util. bitset 의 메모리 사용 방식, 전체 성능 이 이상 적 이지 않 기 때 문 이 라 고 생각 합 니 다.
5 Reference