उदाहरण से Bloom Filter को समझना
(llimllib.github.io)- Bloom Filter एक probabilistic data structure है, जो memory-efficient तरीके से किसी set में element की मौजूदगी को तेज़ी से जांचता है
- यह केवल इतना बताता है कि कोई element set में पक्का नहीं है, या हो सकता है मौजूद हो, और इसमें false positive की संभावना होती है
- इसकी मूल संरचना bit vector और कई hash functions का उपयोग करती है, जो हर element से जुड़े bits को 1 पर सेट करते हैं
- filter का आकार और hash functions की संख्या के आधार पर error rate और performance तय होते हैं, और इन्हें उपयोग के अनुसार समायोजित किया जा सकता है
- इसमें सुझाए गए hash functions, optimal settings तय करने के तरीके, space efficiency, और वास्तविक उपयोग के उदाहरण भी शामिल हैं
Bloom Filter क्या है
- Bloom Filter एक data structure है जो किसी खास element की set में मौजूदगी को तेज़ी से और memory-efficient तरीके से जांचता है
- इस efficiency के लिए Bloom Filter एक probabilistic data structure है, इसलिए जांच का परिणाम "set में पक्का नहीं है" या "set में हो सकता है मौजूद हो" में से एक होता है
- Bloom Filter की मुख्य संरचना bit vector है
- किसी element को जोड़ते समय, उस element को कई बार hash करके संबंधित index के bits को 1 पर सेट किया जाता है
- अगर हर hash function से निकले index के सभी bits 1 हों, तो इसे "मौजूद हो सकता है" माना जाता है; नहीं तो इसे "पक्का नहीं है" माना जाता है
काम करने का उदाहरण
- कई hash functions (जैसे: Fnv, Murmur) के ज़रिए elements को कई bit indexes पर map किया जाता है
- element जोड़ते समय, निकले हुए indexes के bits को 1 में बदल दिया जाता है
- किसी खास element की मौजूदगी जांचते समय, अगर उसी hash functions से निकले सभी indexes 1 हों, तो उसे "मौजूद हो सकता है" माना जाता है
- अगर उनमें से एक भी bit 0 हो, तो यह निश्चित रूप से कहा जा सकता है कि वह "set में नहीं है"
- इसी वजह से false positive की संभावना पैदा होती है
उन्नत विषय
सावधानी: लेखक के पास बड़े पैमाने की service में Bloom Filter को वास्तव में लागू करने का अनुभव नहीं है
Hash function का चयन
- independent और uniform distribution वाले hash functions की सिफारिश की जाती है
- cryptographic hash functions (sha1 आदि) धीमे होते हैं, इसलिए वे उपयुक्त नहीं हैं
- तेज़ और सरल hash functions के उदाहरण हैं: Murmur, xxHash, Fnv, HashMix आदि
- एक वास्तविक उदाहरण में md5 से murmur पर बदलने से 800% से अधिक speed improvement मिला
Bloom Filter का आकार तय करना
- filter size (m) जितना बड़ा होगा, false positive rate उतना कम होगा
- false positive rate को आम तौर पर (1-e^(-kn/m))^k से approximate किया जा सकता है
- expected element count (n), filter size (m), और hash functions की संख्या (k) को संतुलित तरीके से तय करना चाहिए
Hash functions कितने हों?
- hash functions की संख्या जितनी अधिक होगी, speed उतनी कम होगी और filter उतनी जल्दी भर जाएगा
- बहुत कम होने पर false positive rate बढ़ जाता है
- ideal k को (m/n)ln(2) से निकाला जाता है
- design करते समय यह प्रक्रिया अपनाई जाती है:
- expected element count n का अनुमान लगाएँ
- bits की संख्या m तय करें
- optimal k निकालें
- देखें कि मनचाहा error rate मिल रहा है या नहीं; नहीं तो m को समायोजित करें
Performance और space efficiency
- Bloom Filter में element add/existence check की time complexity O(k) होती है
- space efficiency, स्वीकार्य error rate और elements की range पर निर्भर करती है
- अगर elements की range का मोटा अनुमान भी न लगाया जा सके, तो hash table या scalable Bloom Filter बेहतर हो सकता है
उपयोग के उदाहरण
- विस्तृत उपयोग उदाहरणों के लिए Wikipedia देखें
- C. Titus Brown ने Bloom Filter के bioinformatics application cases प्रस्तुत किए हैं
संदर्भ सामग्री
- Broder, Mitzenmacher : Network Applications of Bloom Filters: A Survey — Bloom Filter का overview paper
- Wikipedia – Bloom Filter
- Kirsch, Mitzenmacher: Less Hashing, Same Performance
- Almeida आदि: Scalable Bloom Filters
1 टिप्पणियां
Hacker News राय