Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
Data Migration with Spark to Hive
Databricks
Degrading Performance? You Might be Suffering From the Small Files Syndrome
Databricks
Apache Kafka Architecture & Fundamentals Explained
confluent
Apache Hive Hook
Minwoo Kim
[215]네이버콘텐츠통계서비스소개 김기영
NAVER D2
Evening out the uneven: dealing with skew in Flink
Flink Forward
Netflix Data Pipeline With Kafka
Allen (Xiaozhong) Wang
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Guido Schmutz
1
of
35
Top clipped slide
Bloomfilter
Nov. 23, 2017
•
0 likes
30 likes
×
Be the first to like this
Show More
•
3,584 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
BloomFilter, space-efficient probabilistic data structure
DaeMyung Kang
Follow
(Remote) Data Engineer at Udemy
Advertisement
Advertisement
Advertisement
Recommended
Iceberg: A modern table format for big data (Strata NY 2018)
Ryan Blue
1.2K views
•
34 slides
Streaming Data Lakes using Kafka Connect + Apache Hudi | Vinoth Chandar, Apac...
HostedbyConfluent
3.7K views
•
38 slides
Tuning Apache Kafka Connectors for Flink.pptx
Flink Forward
355 views
•
54 slides
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
Flink Forward
365 views
•
16 slides
Exactly-Once Financial Data Processing at Scale with Flink and Pinot
Flink Forward
536 views
•
41 slides
Apache Iceberg - A Table Format for Hige Analytic Datasets
Alluxio, Inc.
6.3K views
•
28 slides
More Related Content
Slideshows for you
(20)
Data Migration with Spark to Hive
Databricks
•
1.3K views
Degrading Performance? You Might be Suffering From the Small Files Syndrome
Databricks
•
417 views
Apache Kafka Architecture & Fundamentals Explained
confluent
•
24.7K views
Apache Hive Hook
Minwoo Kim
•
17K views
[215]네이버콘텐츠통계서비스소개 김기영
NAVER D2
•
7.1K views
Evening out the uneven: dealing with skew in Flink
Flink Forward
•
1.8K views
Netflix Data Pipeline With Kafka
Allen (Xiaozhong) Wang
•
38K views
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Guido Schmutz
•
1.1K views
Airflow 101
SaarBergerbest
•
440 views
Jacob Marble [InfluxData] | Observability with InfluxDB IOx and OpenTelemetry...
InfluxData
•
216 views
Apache Iceberg: An Architectural Look Under the Covers
ScyllaDB
•
904 views
Removing performance bottlenecks with Kafka Monitoring and topic configuration
Knoldus Inc.
•
1.3K views
Kafka replication apachecon_2013
Jun Rao
•
21.1K views
Diving into Delta Lake: Unpacking the Transaction Log
Databricks
•
755 views
Implementing Domain Events with Kafka
Andrei Rugina
•
837 views
Top 5 Mistakes When Writing Spark Applications
Spark Summit
•
25.6K views
Securing data in hybrid environments using Apache Ranger
DataWorks Summit
•
1.4K views
Encrypting and Protecting Your Data in Neo4j(Jeff_Tallman).pptx
Neo4j
•
375 views
Please Upgrade Apache Kafka. Now. (Gwen Shapira, Confluent) Kafka Summit SF 2019
confluent
•
3.8K views
Simplify CDC Pipeline with Spark Streaming SQL and Delta Lake
Databricks
•
2K views
Similar to Bloomfilter
(9)
[261] 실시간 추천엔진 머신한대에 구겨넣기
NAVER D2
•
45.2K views
Webservice cache strategy
DaeMyung Kang
•
36.6K views
Memory corruption stack
codevania
•
1.1K views
B1 최신분산시스템이해결하고있는오래된이슈들
NAVER D2
•
1.8K views
NDC 2018 억! 소리나는 게임 서비스 플랫폼을 지탱하는 알고리즘 - 해시, 불변데이터, 확률적 자료구조
Isaac Jeon
•
1.1K views
[14.10.21] Far Cry and DX9 번역(shaderstudy)
해강
•
1.1K views
Open domain dialogue Chatbot(잡담봇 삽질기)
NAVER Engineering
•
2.9K views
Fabric High-throughtput
KyungSeok Lee
•
1K views
파이썬을 활용한 챗봇 서비스 개발 3일차
Taekyung Han
•
2.6K views
Advertisement
More from DaeMyung Kang
(20)
Count min sketch
DaeMyung Kang
•
2.1K views
Redis
DaeMyung Kang
•
16.5K views
Ansible
DaeMyung Kang
•
3.8K views
Why GUID is needed
DaeMyung Kang
•
4.9K views
How to use redis well
DaeMyung Kang
•
3.8K views
The easiest consistent hashing
DaeMyung Kang
•
2.2K views
How to name a cache key
DaeMyung Kang
•
1.6K views
Integration between Filebeat and logstash
DaeMyung Kang
•
1.8K views
How to build massive service for advance
DaeMyung Kang
•
13.1K views
Massive service basic
DaeMyung Kang
•
10.9K views
Data Engineering 101
DaeMyung Kang
•
4.3K views
How To Become Better Engineer
DaeMyung Kang
•
20.4K views
Kafka timestamp offset_final
DaeMyung Kang
•
609 views
Kafka timestamp offset
DaeMyung Kang
•
4.6K views
Data pipeline and data lake
DaeMyung Kang
•
3.2K views
Redis acl
DaeMyung Kang
•
1.8K views
Coffee store
DaeMyung Kang
•
2K views
Scalable webservice
DaeMyung Kang
•
2.1K views
Number system
DaeMyung Kang
•
674 views
webservice scaling for newbie
DaeMyung Kang
•
21.5K views
Recently uploaded
(20)
Browser Rendering
Wonjun Hwang
•
14 views
AWS Summit Seoul 2023 | 비즈니스 경계를 허무는 혁신: 단 하나의 선택, 슈퍼앱
Amazon Web Services Korea
•
73 views
AWS Summit Seoul 2023 | 100만명이 사용하는 GenerativeAI 이루다를 만들면서 배운 것 : 스캐터랩의 AWS 활용법
Amazon Web Services Korea
•
57 views
ASP.NET Core와 Azure App Service와의 환상적인 만남
SangHoon Han
•
40 views
2023_한국공간정보통신_회사소개서.pdf
(주)한국공간정보통신
•
3 views
AWS Summit Seoul 2023 | 팬덤을 위한 아티스트 IP 기반의 디지털 콜렉터블 플랫폼
Amazon Web Services Korea
•
128 views
AWS Summit Seoul 2023 | 데이터, 분석 및 AI를 통합하는 단 하나의 레이크하우스, Databricks on AWS 로 ...
Amazon Web Services Korea
•
80 views
AWS Summit Seoul 2023 | AWS Graviton과 함께하는 계획문제 최적화 애플리케이션 개발
Amazon Web Services Korea
•
42 views
AWS Summit Seoul 2023 | 금융 디지털 서비스 혁신을 리딩하는 교보정보통신의 클라우드 마이그레이션 사례 소개
Amazon Web Services Korea
•
69 views
AWS Summit Seoul 2023 | 기업 고객 대상 기계학습 기반 콜센터 도입을 위한 여정
Amazon Web Services Korea
•
33 views
캐드앤그래픽스 2023년 6월호 목차
캐드앤그래픽스
•
75 views
《留学生办伦敦摄政大学毕业证文凭证书学位证书》
zhgadu
•
3 views
[보험사를 위한 AWS Data Analytics Day] 7_데이터 경영을 위한 실행 프ᄅ...
AWS Korea 금융산업팀
•
52 views
소프트웨어의 계층구조
Wonjun Hwang
•
22 views
[보험사를 위한 AWS Data Analytics Day] 2_금융의 핵심자산 Data, 글로ᄇ...
AWS Korea 금융산업팀
•
64 views
AWS Summit Seoul 2023 | 지능화되는 랜섬웨어 위협으로부터 지킬 것인가? 당할 것인가?
Amazon Web Services Korea
•
51 views
AWS Summit Seoul 2023 | Global scale service의 중앙 집중식 Observability 구축
Amazon Web Services Korea
•
63 views
검색엔진에 적용된 ChatGPT
Tae Young Lee
•
81 views
AWS Summit Seoul 2023 |Datadog을 활용한 AWS 서버리스 Observability
Amazon Web Services Korea
•
56 views
AWS Summit Seoul 2023 |투자를 모두에게, 토스증권의 MTS 구축 사례
Amazon Web Services Korea
•
97 views
Advertisement
Bloomfilter
아주 심플한 블룸필터의
원리 강대명 (CHARSYAM@NAVER.COM)
블룸필터가 뭔가요? 있다고 하면
없을 수 있지만(False Positive), 없다고 하면 정말 없는 자료구조(No False Negative)
실화입니까? 있다고 해도 실제로
없을 수 있다면, 매번 있는지 확인해 야 할 것 같은데, 이런 걸 어디에 써야 하나요? HashMap 등은 contains에 있으면 반드시 있으니, 믿 고 쓸 수 있는데 말입니다.
블룸필터를 쓰고 있는
것들? Cassandra Hbase Oracle(Bloom pruning of partitions for queries) Quora, FaceBook
실화입니까?(2) 이런 제품들이나 회사들이
블룸필터를 쓰는 이유는 무엇 일까요?
DISK와 메모리의 속도비교
L1 cache reference 0.5 ns Branch mispredict 5 ns L2 cache reference 7 ns 14x L1 cache Mutex lock/unlock 25 ns Main memory reference 100 ns 20x L2 cache, 200x L1 cache Compress 1K bytes with Zippy 3,000 ns 3 us Send 1K bytes over 1 Gbps network 10,000 ns 10 us Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD Read 1 MB sequentially from memory 250,000 ns 250 us Round trip within same datacenter 500,000 ns 500 us Read 1 MB sequentially from SSD* 1,000,000 ns 1,000 us 1 ms ~1GB/sec SSD, 4X memory Disk seek 10,000,000 ns 10,000 us 10 ms 20x datacenter roundtrip Read 1 MB sequentially from disk 20,000,000 ns 20,000 us 20 ms 80x memory, 20X SSD Send packet CA->Netherlands->CA 150,000,000 ns 150,000 us 150 ms
메인메모리와 디스크 디스크 접근은
메모리보다 겨우 10,000배 느립니다. MEM 속도 = 디스크 * 10,000 SSD는 1,500 배 느림. MEM 속도 = SSD * 1,500 결론 디스크 접근을 줄이자.
블룸필터의 필요성 실제 데이터가
있는지 정확히 알려면? 메모리가 데이터 사이즈 만큼 필요함. 데이터량이 굉장히 많다면? 블룸필터를 이용하면 메모리 사용량을 줄이면서 비슷한 효과 를 낼 수 있음.
블룸필터의 필요성 블 룸 필 터 SSD/HDD Query Query Query Query exist exist exist not exist Query Query not
exist not exist exist exist not exist 실제 3번의 쿼리를 할 필요가 없음.
How 블룸필터 works? 블룸필터는
bitarray 입니다. n개의 hash를 선택합니다.(crc, murmur, md5등) 보통 3개 hash(key, 0) 은 crc hash를 의미 hash(key, 1) 은 murmur hash를 의미 hash(key, 2) 은 md5 hash를 의미
블룸필터 #1 bitarray의
크기는 16 hash(“charsyam”, 0) % 16 = 3 hash(“charsyam”, 1) % 16 = 5 hash(“charsyam”, 2) % 16 = 11 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 add(“charsyam”)
블룸필터 #2 bitarray의
크기는 16 hash(“bloomfilter”, 0) % 16 = 0 hash(“bloomfilter”, 1) % 16 = 1 hash(“bloomfilter”, 2) % 16 = 15 1 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 add(“bloomfilter”)
블룸필터 #3 bitarray의
크기는 16 hash(“clark”, 0) % 16 = 1 hash(“clark”, 1) % 16 = 2 hash(“clark”, 2) % 16 = 14 1 1 1 1 0 1 0 0 0 0 0 1 0 0 1 1 add(“clark”)
블룸필터 #4 exists
동작, 3개의 비트가 1로 채워져 있으면 존재한다고 알림. hash(“charsyam”, 0) % 16 = 3 hash(“charsyam”, 1) % 16 = 5 hash(“charsyam”, 2) % 16 = 11 1 1 1 1 0 1 0 0 0 0 0 1 0 0 1 1 exists(“charsyam”)
블룸필터 #5 exists,
False Positive, fake는 추가하지 않았지만 모든 bit가 1임 hash(“fake”, 0) % 16 = 0 hash(“fake”, 1) % 16 = 3 hash(“fake”, 2) % 16 = 15 1 1 1 1 0 1 0 0 0 0 0 1 0 0 1 1 exists(“fake”)
블룸필터의 한계 #1 데이터의
삭제가 불가능하다. Hbase, Cassandra 지워지는 케이스는 없고 Compaction시에 재생성
블룸필터의 한계 #2 false
positive 가 발생하는 비율을 적절히 조절해야 한다.
False Positive #1 False
Positive는 당연히 발생하게 됨. k: 해시 함수 개수 m: bitarray의 크기 n: 전체 원소의 개수 당연히 m이 크고 n이 적을 수록 False Positive가 적음 그럼 k는?
False Positive #2 가장
적은 False Positive를 가지는 경우
False Positive #3 한번의
hash 연산으로 나온 Bit를 1로 설정 한번의 hash 연산으로 BitArray V의 어떤 값이 설정될 확률 = 1/m 반대로 어떤 값이 설정 안될 확률은 (1 – 1/m)
False Positive #4 k
개의 해시 함수를 이용할 경우에 설정되지 않을 확률은 n 개의 원소가 들어가게 되면 다시 이 확률은
False Positive #5 이제
다시 n개의 원소가 있을 때 특정 Bit가 1로 셋팅되어 있을 확률은 1 에서 해당 값을 빼면 됨.
False Positive #6 k
개의 해시 함수가 실행되는 것과 위의 1로 설정될 확률이 독립 사건이므로…(이 부분이 이해가 안가요!!! ㅋㅋㅋ) 각각의 해시 함수가 실행될 때 마다 이 확률이라서…
False Positive #7
다시 m 이 무한으로 수렴한다고 하면 그 값이 아래와 같이 되므 로…
False Positive #8 즉
False Postivie가 발생할 확률은 아래의 식이 도출됨 (뭐지 이건 또 T.T)
False Positive #9 다시,
가장 적은 False Positive를 가지는 경우
False Positive #10 다시,
가장 적은 False Positive를 가지는 경우 k를 유지할 경우에 m, n의 변화에 따른 False Postivie 확률 p의 변화
Scalable BloomFilter #1 블룸필터를
확장 가능하게 만들 수 있을까? 즉, 처음에 원소가 적을 때는 m을 작게 잡고, 윈소가 늘어나면 m을 크게 만들면 좋지 않을까? 0 0 0 1 최초 1 1 1 1 0 1 0 0 확장
Scalable BloomFilter #2 기존
블룸필터의 확장은 불가능 배열의 크기가 커지면 해시에 대한 modular도 달라지면서 기 존 값들의 의미가 전부 사라짐. 그러면 새로 만들어야 함.
Scalable BloomFilter #3
새로운 블룸필터를 만들어서, 함께 유지한다. 0 0 0 1 0 0 0 1 1 1 1 1 0 10 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 0 1 0 0 0 1 2
Scalable BloomFilter #4
Add 동작 입력 key가 기존 블룸필터들에 존재하는 지 확인 있으면, 리턴! 없으면, 여유 공간이 있는지 보고, 새로운 블룸필터 체인을 만들 어야 하는지 확인 맨 마지막 블룸필터에 삽입한다.
Scalable BloomFilter #5
check 동작 모든 블룸필터 체인에서 검색을 해서 없어야만 없다고 알려준다.
Scalable BloomFilter #6
확장시에 새 블룸필터의 사이즈는 더 늘어날 수 있다. 이에 따라 에러율도 바뀌어야 한다. ERROR_TIGHTENING_RATIO 라는 개념이 적용되는데, 이건 패스…
Reference 꼭 참고하세요.
https://en.wikipedia.org/wiki/Bloom_filter http://d2.naver.com/helloworld/749531 http://gsd.di.uminho.pt/members/cbm/ps/dbloom.pdf https://github.com/RedisLabsModules/rebloom https://github.com/jaybaird/python-bloomfilter/
Thank you.
Advertisement