स्केलेबल ब्लूम फ़िल्टर कैसे काम करते हैं?


15

मैं स्केलेबल ब्लूम फ़िल्टर पर पढ़ रहा था और समझ नहीं पा रहा था कि हर बार एक घटक ब्लूम फ़िल्टर कैसे भरता है, बड़े आकार के साथ एक नया ब्लूम फ़िल्टर जोड़ा जाता है।

प्रारंभिक रूप से बनाए गए फ़िल्टर में सेट बिट्स में योगदान करने वाले तत्वों को उपस्थिति के लिए नहीं देखा जा सकता है। शायद मेरी समझ में यह गलत है?

मैं बुनियादी ब्लॉम फ़िल्टर को समझता हूं। हालाँकि, मैं अपने सिर को डायनामिक ब्लूम फ़िल्टर के चारों ओर नहीं लपेट सकता।

जवाबों:


7

मुझे यह देखने के लिए एक शॉट देने की कोशिश करें कि मैं कसाई को कितना दे सकता हूं। :-)

तो, शुरू करने के लिए, आपको एक नियमित ब्लॉम फ़िल्टर बनाने में सक्षम होने की आवश्यकता होती है जो एक झूठी सकारात्मक की अधिकतम संभावना वाले तत्वों की एक सीमित संख्या की अनुमति देता है। एक स्केलेबल कार्यान्वयन के निर्माण के प्रयास से पहले आपके मूल फ़िल्टर के लिए इन सुविधाओं को जोड़ना आवश्यक है।

इससे पहले कि हम संभावना को नियंत्रित और अनुकूलित करने का प्रयास करें, यह पता लगाने देता है कि दिए गए ब्लूम फ़िल्टर आकार के लिए संभावना क्या है।

पहले हम बिटफ़ील्ड को विभाजित करते हैं कि हमारे पास कितने हैश फ़ंक्शन हैं (बिट्स की कुल संख्या / हैश फ़ंक्शन = स्लाइस) बिट्स के स्लाइस प्राप्त करने के लिए जो प्रत्येक हैश फ़ंक्शन का प्रतिनिधित्व करते हैं ताकि हर तत्व हमेशा के बिट्स द्वारा वर्णित हो।

यदि आप स्लाइस की संख्या या बिट्स की संख्या प्रति स्लाइस बढ़ाते हैं, तो झूठी सकारात्मक की संभावना कम हो जाएगी।

यह भी अनुसरण करता है कि जैसे-जैसे तत्व जोड़े जाते हैं, अधिक बिट्स 1 पर सेट होते हैं, इसलिए झूठी सकारात्मकता बढ़ जाती है। हम इसे प्रत्येक स्लाइस के "भरण अनुपात" के रूप में संदर्भित करते हैं।

जब फ़िल्टर बड़ी मात्रा में डेटा रखता है, तो हम मान सकते हैं कि इस फ़िल्टर के लिए झूठी सकारात्मकता की संभावना स्लाइस की संख्या के लिए उठाया गया अनुपात है (यदि हम अनुपात का उपयोग करने के बजाय वास्तव में बिट्स की गणना करते हैं, तो यह सरल हो जाता है पुनरावृत्ति समस्या के साथ एक क्रमचय)।

तो, हम कैसे पता लगाते हैं कि एक खिलने वाले फिल्टर में झूठी सकारात्मकता की संभावना कैसे चुनें? हम स्लाइस की संख्या को संशोधित कर सकते हैं (जो भरण अनुपात को प्रभावित करेगा)।

यह पता लगाने के लिए कि हमारे पास कितने स्लाइस हैं, हम एक स्लाइस के लिए इष्टतम भरण अनुपात का पता लगाने के साथ शुरू करते हैं। चूंकि भरण अनुपात बिट्स की संख्या से एक स्लाइस में निर्धारित होता है जो 1 बनाम बिट्स की संख्या है जो 0 हैं, हम यह निर्धारित कर सकते हैं कि प्रत्येक बिट एक स्लाइस में (100% - (1 / बिट्स) की संभावना से परेशान रहेगा। )। चूंकि हम कई आइटम सम्मिलित करने जा रहे हैं, हमारे पास प्रतिष्ठा की समस्या के साथ एक और क्रमचय है और हम चीजों को अपेक्षित भराव अनुपात तक बढ़ाते हैं, जो (100% - (100% - (एक स्लाइस में बिट्स)) ^ है "तत्वों को डाला"))। खैर, यह पता चला है कि यह दूसरे समीकरण के समान है। कागज में, वे भराव अनुपात को दूसरे समीकरण से संबंधित करते हैं, इसलिए यह टेलर श्रृंखला (1-ई ^ (- n / m)) में अच्छी तरह से फिट बैठता है। इस के साथ थोड़ा सा चक्कर लगाने के बाद, यह पता चला है कि इष्टतम भरण अनुपात हमेशा 50% है,

इसलिए, चूंकि एक फ़िल्टर की संभावना स्लाइस की संख्या के लिए उठाया गया अनुपात है, हम 50% में भर सकते हैं और P = (50%) ^ k या k = log_2 (1 / P) प्राप्त कर सकते हैं। फिर हम इस फ़ंक्शन का उपयोग स्केलेबल ब्लेंडर फिल्टर के लिए फिल्टर की सूची में दिए गए फ़िल्टर के लिए उत्पन्न स्लाइस की संख्या की गणना करने के लिए कर सकते हैं।

    def slices_count(false_positive_probability):
        return math.ceil(math.log(1 / false_positive_probability, 2))

संपादित करें: इसे लिखने के बाद, मुझे "पचास-प्रतिशत नियम" का उल्लेख आया, जब TAoCP Vol 1 में मित्र प्रणाली आधारित डायनामिक मेमोरी आवंटन पर पढ़ना, pp 442-445 के साथ एक बहुत क्लीनर तर्क के साथ वक्र को फिटिंग करने के लिए (1) -e ^ (- n / मीटर))। नुथ एक पेपर "द पचास प्रतिशत रूल रिविजिटेड" कॉन्सेप्ट पर बैकग्राउंड की थोड़ी सी पृष्ठभूमि ( पीडीएफ यहां उपलब्ध है ) का संदर्भ देता है ।


उस पेपर में ब्लूम फिल्टर की कोई चर्चा नहीं है, इसलिए यहां इस "पचास प्रतिशत नियम" के लिए कोई औचित्य नहीं देखा गया है। एक प्राथमिकता, मुझे उम्मीद है कि "पचास प्रतिशत नियम" सिर्फ कुछ hocus pocus comp विज्ञान के माध्यम से लोगों के आसपास है क्योंकि असली जवाब में विचारों का एक समूह शामिल है जो अपने विशेष मॉड्यूल के डिजाइन मानदंडों से परे जाते हैं।
जेफ बर्ड्स

1
अरे @JeffBurdges, क्या आपको यह कम से कम उत्सुक नहीं लगता कि दोनों अवधारणाएं समान हैं?
जॉन ब्रिन्हर्स्ट

4

एक आइटम स्केलेबल ब्लूम फ़िल्टर में है यदि कोई भी फ़िल्टर सही है। इसलिए, आप पिछले आइटम के लिए सदस्यता प्रश्नों को प्रभावित किए बिना फ़िल्टर जोड़ सकते हैं।

यह सुनिश्चित करने के लिए कि आपके पास अभी भी सबसे खराब स्थिति वाली झूठी सकारात्मक गारंटी है, नए फिल्टर झूठी सकारात्मक दरों के साथ जोड़े जाते हैं जो ज्यामितीय रूप से घटते हैं। उदाहरण के लिए, पहले फिल्टर में झूठी सकारात्मक दर है p, दूसरे rp, तीसरे r^2p, आदि। स्केलेबल ब्लूम फ़िल्टर पर झूठे सकारात्मक की संभावना तब संघ द्वारा बाध्य है sum_{k>=0} r^k p = p/(1-r):।


3
इन सूत्रों में 'r' क्या दर्शाता है?
zslayton

2

मैं स्केलेबल ब्लूम फ़िल्टर पर पढ़ रहा था और समझ नहीं पा रहा था कि हर बार एक घटक ब्लूम फ़िल्टर कैसे भरता है, बड़े आकार के साथ एक नया ब्लूम फ़िल्टर जोड़ा जाता है।

प्रारंभिक रूप से बनाए गए फ़िल्टर में सेट बिट्स में योगदान करने वाले तत्वों को उपस्थिति के लिए नहीं देखा जा सकता है। शायद मेरी समझ में यह गलत है?

नमस्ते,
पहले स्तर के फ़िल्टर के बिट क्षेत्र के संतृप्त होने तक मूल विचार को पहले फ़िल्टर में जोड़ना है। संतृप्त होने का मतलब यह नहीं है कि हर बिट का उपयोग किया जाता है, लेकिन इसका मतलब है कि फिल्टर में इतनी प्रविष्टियां हैं कि अतिरिक्त प्रविष्टियां बहुत अधिक झूठी सकारात्मकता पैदा करेंगी।

संतृप्ति के बिंदु से, किसी भी नए आइटम को संतृप्त फ़िल्टर में नहीं जोड़ा जाएगा, लेकिन एक ताजा और बड़े उप-फ़िल्टर (दूसरे स्तर के फिल्टर) में।

एक मूल्य खोजने के लिए, आप इसे पहले स्तर के फ़िल्टर में देखेंगे, और यदि आप इसे वहाँ नहीं पा रहे हैं, तो आप इसे दूसरे स्तर के फ़िल्टर में देखेंगे। यदि आप इसे इनमें से किसी भी फ़िल्टर में पा सकते हैं, तो यह फ़िल्टर के लिए "ज्ञात" (एक अच्छे अवसर से) है (ब्लूम फ़िल्टर की प्रकृति के परिणामस्वरूप झूठी सकारात्मकता हो सकती है)। यदि आपको किसी भी फ़िल्टर में मान नहीं मिल रहा है, तो फ़िल्टर की गारंटी है कि इसे न देखें। यह, निश्चित रूप से, एक पुनरावर्ती डेटा संरचना के रूप में व्यक्त किया जा सकता है।

आप मेरे ब्लॉग पोस्ट को पढ़ सकते हैं जिसमें जावा में एक स्केलेबल ब्लूम फ़िल्टर कार्यान्वयन शामिल है और एक विवरण यह बताता है कि यह कैसे काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.