Blütefilter
A Blütefilter ist ein platzeffizienter probabilistisch Datenstruktur, von Burton Howard Bloom im Jahr 1970 konzipiert, wird verwendet, um zu testen, ob eine Element ist ein Mitglied von a einstellen. Falsch positiv Übereinstimmungen sind möglich, aber Falsche Negative sind nicht - mit anderen Worten, eine Abfrage gibt entweder "möglicherweise in Set" oder "definitiv nicht in Set" zurück. Elemente können dem Satz hinzugefügt, aber nicht entfernt werden (obwohl dies mit dem behandelt werden kann BLEIM -FILTER Zählen Variante); Je mehr Elemente hinzugefügt wurden, desto größer ist die Wahrscheinlichkeit falscher Positives.
Bloom schlug die Technik für Anwendungen vor Hashing Techniken wurden angewendet. Er gab das Beispiel von a Bindestrichalgorithmus Für ein Wörterbuch von 500.000 Wörtern, von denen 90% einfache Haftstrafenregeln befolgen, aber die verbleibenden 10% erfordern teure Festplattenzugriffe, um spezifische Bindestrichmuster abzurufen. Mit ausreichend KerngedächtnisEin fehlerfreier Hash könnte verwendet werden, um alle unnötigen Festplattenzugriffe zu beseitigen. Auf der anderen Seite verwendet Blooms Technik mit begrenztem Kernspeicher einen kleineren Hash -Bereich, eliminiert jedoch dennoch die unnötigen Zugriffe. Beispielsweise beseitigt ein Hash-Bereich nur 15% der Größe, die von einem idealen fehlerfreien Hash benötigt wird, 85% der Festplattenzugriffe.[1]
Allgemeiner weniger als 10 Bits pro Element ist für eine 1% falsch positive Wahrscheinlichkeit erforderlich, unabhängig von der Größe oder Anzahl der Elemente im Satz.[2]
Algorithmus Beschreibung
Ein leerer Blütefilter ist ein Bit -Array von m Bits, alle auf 0 gesetzt k anders Hash Funktionen definiert, jeder davon Karten oder Hashes ein festgelegtes Element zu einem der m Array -Positionen, die eine einheitliche Zufallsverteilung erzeugen. Typischerweise, k ist eine kleine Konstante, die von der gewünschten falschen Fehlerrate abhängt ε, während m ist proportional zu k und die Anzahl der zugefügten Elemente.
Zu hinzufügen ein Element, füttern Sie es jedem der der k Hash -Funktionen zu bekommen k Array -Positionen. Stellen Sie die Bits an all diesen Positionen auf 1 ein.
Zu Anfrage Für ein Element (testen Sie, ob es sich im Satz befindet) füttern Sie es jedem der der k Hash -Funktionen zu bekommen k Array -Positionen. Wenn irgendein Von den Bits an diesen Positionen ist 0, das Element ist definitiv nicht im Set; Wenn es so wäre, wären alle Bits beim Einfügen auf 1 eingestellt worden. Wenn alle 1 sind, dann befindet sich das Element im Satz, oder Die Bits wurden zufällig während der Einführung anderer Elemente auf 1 gesetzt, was zu a führte Falsch positiv. In einem einfachen Blütefilter gibt es keine Möglichkeit, zwischen den beiden Fällen zu unterscheiden, aber fortschrittlichere Techniken können dieses Problem angehen.
Die Erfordernis des Entwurfs k Verschiedene unabhängige Hash -Funktionen können für große unerschwingliche sein k. Für eine gute Hash-Funktion mit einer breiten Ausgabe sollte es wenig geben, wenn eine Korrelation zwischen verschiedenen Bitfeldern eines solchen Hashs korreliert wird, sodass diese Art von Hash verwendet werden kann, um mehrere "unterschiedliche" Hash-Funktionen zu generieren, indem deren Ausgang in mehrere Bits geschnitten wird Felder. Alternativ kann man passieren k Unterschiedliche Anfangswerte (z. B. 0, 1, ..., k- 1) zu einer Hash -Funktion, die einen Anfangswert nimmt; oder fügen Sie diese Werte dem Schlüssel hinzu (oder adenden Sie). Für größere m und/oder kDie Unabhängigkeit zwischen den Hash -Funktionen kann mit vernachlässigbarer Anstieg der falsch positiven Rate entspannt werden.[3] (Speziell, Dillinger & Manolios (2004b) Zeigen Sie die Wirksamkeit der Ableitung des k Indizes verwenden Verbessertes Doppelhashing und dreifaches Hashing, Varianten von Double Hashing Das sind effektiv einfache Zufallszahlengeneratoren, die mit den zwei oder drei Hash -Werten gesät sind.)
Das Entfernen eines Elements aus diesem einfachen Blütefilter ist unmöglich, da es keine Möglichkeit gibt, zu sagen, welches der der k Bits IT -Karten sollten gelöscht werden. Obwohl eines davon einstellen k Bits bis Null genügt, um das Element zu entfernen. Es würde auch alle anderen Elemente entfernen, die sich an diesem Bit abbilden. Da der einfache Algorithmus keine Möglichkeit bietet, zu bestimmen, ob andere Elemente hinzugefügt wurden, die die Bits für das Entfernen des Elements beeinflussen, würde das Löschen eines der Bits die Möglichkeit falscher Negative einführen.
Das einmalige Entfernen eines Elements aus einem Bloomfilter kann simuliert werden, indem ein zweiter Blütefilter enthält, der entfernt wurde. Falscharme im zweiten Filter werden jedoch im zusammengesetzten Filter zu falsch negativen, was möglicherweise unerwünscht sein kann. Bei diesem Ansatz ist eine Wiedereinstellung eines zuvor entfernten Elements nicht möglich, da man ihn aus dem "entfernten" Filter entfernen müsste.
Es ist häufig der Fall, dass alle Schlüsseln verfügbar sind, aber teuer zu zählen sind (z. B. viele Festplatten lesen). Wenn die falsch positive Rate zu hoch wird, kann der Filter regeneriert werden. Dies sollte ein relativ seltenes Ereignis sein.
Platz- und Zeitvorteile
Bloom -Filter haben beim Risiko falsch -positives Aspekte einen erheblichen Platzvorteil gegenüber anderen Datenstrukturen für die Darstellung von Sätzen, wie z. B. selbstausgleichende binäre Suchbäume, Versuche, Hash -Tische, oder einfach Arrays oder verlinkte Listen der Einträge. Die meisten von ihnen erfordern das Speichern mindestens die Datenelemente selbst, die von einer kleinen Anzahl von Bits für Smallgifter bis hin zu beliebiger Anzahl von Bits, wie z.Versuche sind eine Ausnahme, da sie Speicher zwischen Elementen mit gleichen Präfixen teilen können). Bloom -Filter speichern jedoch überhaupt nicht die Datenelemente, und für den tatsächlichen Speicher muss eine separate Lösung bereitgestellt werden. Verbundene Strukturen entstehen für Zeiger einen zusätzlichen linearen Raumaufwand. Ein Bloomfilter mit einem Fehler von 1% und einem optimalen Wert von kIm Gegensatz dazu erfordert nur etwa 9,6 Bit pro Element, unabhängig von der Größe der Elemente. Dieser Vorteil ergibt sich teilweise aus seiner Kompaktheit, die von Arrays und teilweise aus seiner probabilistischen Natur geerbt wird. Die 1% falsch positive Rate kann durch Hinzufügen von nur etwa 4,8 Bit pro Element um den Faktor zehn verringert werden.
Wenn die Anzahl der potenziellen Werte jedoch gering ist und viele von ihnen im Satz sein können Bit -Array, was für jedes potenzielle Element nur ein Bit erfordert. Hash -Tische erhalten einen Platz und einen Zeitvorteil, wenn sie Kollisionen ignorieren und nur lagern, ob jeder Eimer einen Eintrag enthält. In diesem Fall sind sie effektiv zu Blütenfiltern mit k = 1.[4]
Bloom -Filter haben auch die ungewöhnliche Eigenschaft, dass die Zeit, die entweder zum Hinzufügen von Elementen erforderlich ist, oder zu überprüfen, ob sich ein Element im Satz befindet, eine feste Konstante ist. Ö(k)völlig unabhängig von der Anzahl der Elemente, die bereits im Set sind. Keine andere Datenstruktur mit konstantem Raum hat diese Eigenschaft, aber die durchschnittliche Zugriffszeit des Spärs Hash -Tische Kann sie in der Praxis schneller machen als einige Blütenfilter. In einer Hardware -Implementierung strahlt der Bloom -Filter jedoch, weil es seine k Lookups sind unabhängig und können parallelisiert werden.
Um seine Raumeffizienz zu verstehen, ist es aufschlussreich, den allgemeinen Blütefilter mit seinem Sonderfall zu vergleichen, wann k = 1. Wenn k = 1Um die falsch positive Rate ausreichend niedrig zu halten, sollte ein kleiner Teil der Bits festgelegt werden, was bedeutet, dass das Array sehr groß sein muss und lange Läufe von Nullen enthalten. Das Informationsgehalt des Arrays relativ zu seiner Größe ist niedrig. Der verallgemeinerte Blütefilter (k Mehr als 1) ermöglicht es, viel mehr Bits festzulegen und gleichzeitig eine niedrige falsch positive Rate beizubehalten. Wenn die Parameter (k und m) werden gut ausgewählt, etwa die Hälfte der Bits wird festgelegt,[5] Und diese sind anscheinend zufällig, minimieren Redundanz und Maximierung des Informationsinhalts.
Wahrscheinlichkeit falsch positiv
Angenommen, a Hash-Funktion Wählt jede Array -Position mit gleicher Wahrscheinlichkeit aus. Wenn m ist die Anzahl der Bits im Array, die Wahrscheinlichkeit, dass ein bestimmtes Bit während der Einführung eines Elements nicht durch eine bestimmte Hash -Funktion auf 1 gesetzt ist, ist
Wenn k ist die Anzahl der Hash -Funktionen und jeder hat keine signifikante Korrelation zwischeneinander, dann ist die Wahrscheinlichkeit, dass das Bit nicht von den Hash -Funktionen auf 1 gesetzt ist
Wir können die bekannte Identität für verwenden e–1
Um das für große zu schließen mAnwesend
Wenn wir eingefügt haben n Elemente, die Wahrscheinlichkeit, dass ein bestimmtes Stück noch 0 ist, ist 0
Die Wahrscheinlichkeit, dass es 1 ist, ist daher
Prüfen Sie nun die Mitgliedschaft in einem Element, das nicht im Set steht. Jedes von den k Array -Positionen, die von den Hash -Funktionen berechnet wurden, ist 1 mit einer Wahrscheinlichkeit wie oben. Die Wahrscheinlichkeit, dass alle 1 sind, was das verursachen würde Algorithmus fälschlicherweise zu behaupten, dass sich das Element im Satz befindet, wird oft als gegeben als
Dies ist nicht streng richtig, da es die Unabhängigkeit für die Wahrscheinlichkeiten jedes Bits nimmt. Angenommen, es handelt sich um eine enge Annäherung m (Die Anzahl der Bits im Array) steigt und nimmt zu n (Die Anzahl der eingefügten Elemente) steigt.
Die wahre Wahrscheinlichkeit eines falsch positiven, ohne die Unabhängigkeit zu übernehmen, ist
wo die {Zahnspangen} bezeichnen Stirling Anzahl der zweiten Art.[6]
Eine alternative Analyse, die mit der gleichen Annäherung ohne die Annahme der Unabhängigkeit auftritt, wird von Mitzenmacher und UPFAL gegeben.[7] Schließlich n Gegenstände wurden dem Bloom -Filter hinzugefügt, lassen Sie es q Sei der Bruch der m Bits, die auf 0 eingestellt sind QM.) Dann beim Testen der Mitgliedschaft eines Elements, das nicht im Satz für die Arrayposition von einem der von einem der angegeben ist k Hash -Funktionen, die Wahrscheinlichkeit, dass das Bit auf 1 gesetzt ist, ist . Also die Wahrscheinlichkeit, dass alle k Hash -Funktionen finden, dass ihr Bit auf 1 eingestellt ist. . Ferner der erwartete Wert von q ist die Wahrscheinlichkeit, dass eine bestimmte Array -Position von jedem der von jedem unberührt bleibt k Hash funktioniert für jeden der n Elemente, die (wie oben) ist
- .
Es ist möglich zu beweisen, ohne die Unabhängigkeitsannahme, das q ist sehr stark auf seinen erwarteten Wert konzentriert. Insbesondere von der Azuma -Hoeffding -Ungleichheitsie beweisen das[8]
Aus diesem Grund können wir sagen, dass die genaue Wahrscheinlichkeit falscher Positives ist
wie vorher.
Optimale Anzahl von Hash -Funktionen
Die Anzahl der Hash -Funktionen, k, muss eine positive Ganzzahl sein. Den Einschränkung für eine bestimmte Einschränkung beiseite legen m und n, der Wert von k Das minimiert die falsch positive Wahrscheinlichkeit ist
Die erforderliche Anzahl von Bits, m, gegeben n (die Anzahl der eingefügten Elemente) und eine gewünschte falsch positive Wahrscheinlichkeit ε (und übernehmen den optimalen Wert von k wird verwendet) kann berechnet werden, indem der optimale Wert von ersetzt wird k Im obigen Wahrscheinlichkeitsausdruck:
was vereinfacht werden kann zu:
Das führt zu:
Die optimale Anzahl von Bits pro Element ist also
mit der entsprechenden Anzahl von Hash -Funktionen k (Ignorieren Integralität):
Dies bedeutet, dass für eine gegebene falsch positive Wahrscheinlichkeit εdie Länge eines Blütenfilters m ist proportional zu der Anzahl der gefilterten Elemente n und die erforderliche Anzahl von Hash -Funktionen hängt nur von der falsch positiven Wahrscheinlichkeit ab ε.[9]
Die Formel ist aus drei Gründen ungefähr. Erstens und von geringster Besorgnis nähert es sich an wie , was eine gute asymptotische Annäherung ist (d. H., die als gilt als m → ∞). Zweitens wird davon ausgegangen, dass während des Mitgliedschaftstests das Ereignis, dass ein getestetes Bit auf 1 festgelegt ist ist zufällig integral.
Goel und Gupta,[10] Geben Sie jedoch eine strenge Obergrenze an, die keine Annäherungen macht und keine Annahmen erfordert. Sie zeigen, dass die falsch positive Wahrscheinlichkeit für einen endlichen Blütenfilter mit m Bits (), n Elemente und k Hash -Funktionen sind höchstens
Diese Grenze kann so interpretiert werden, dass die ungefähre Formel kann zu einer Strafe von höchstens ein halbes zusätzliches Element und höchstens ein Stück mehr angewendet werden.
Approxieren die Anzahl der Elemente in einem Bloom -Filter
Swamidass & Baldi (2007) zeigten, dass die Anzahl der Elemente in einem Blütenfilter mit der folgenden Formel angenähert werden kann.
wo ist eine Schätzung der Anzahl der Elemente im Filter, m ist die Länge (Größe) des Filters, k ist die Anzahl der Hash -Funktionen, und X ist die Anzahl der auf eins gesetzten Bits.
Die Vereinigung und Schnittpunkt der Sets
Bloom -Filter sind eine Möglichkeit, eine Reihe von Elementen kompakt darzustellen. Es ist üblich, zu versuchen, die Größe der Kreuzung oder Vereinigung zwischen zwei Sätzen zu berechnen. Blütenfilter können verwendet werden, um die Größe der Kreuzung und Vereinigung von zwei Sätzen zu approximieren. Swamidass & Baldi (2007) zeigte, dass für zwei Blütenfilter der Länge mihre Zählungen können jeweils geschätzt werden als
und
Die Größe ihrer Gewerkschaft kann geschätzt werden als
wo ist die Anzahl der Bits, die in einem der beiden Blütenfilter auf einen eingestellt sind. Schließlich kann die Kreuzung als geschätzt werden als
Verwenden der drei Formeln zusammen.
Interessante Eigenschaften
- Im Gegensatz zu einem Standard Hash-tabelle Verwendung Offene Adressierung zum KollisionsauflösungEin Blütenfilter einer festen Größe kann einen Satz mit einer willkürlich großen Anzahl von Elementen darstellen. Das Hinzufügen eines Elements schlägt aufgrund der Datenstruktur "Auffüllung" nie fehl. Die falsch positive Rate steigt jedoch stetig an, wenn Elemente hinzugefügt werden, bis alle Bits im Filter auf 1 eingestellt sind, an diesem Punkt alle Abfragen liefern ein positives Ergebnis. Mit offenem Adressierungs -Hashing werden falsch positive Ergebnisse nie produziert, aber die Leistung verschlechtert sich stetig, bis sie sich der linearen Suche nähert.
- Union und Überschneidung von Bloom -Filtern mit gleicher Größe und Satz von Hash -Funktionen können mit implementiert werden bitweise Oder und und Operationen. Der Gewerkschaftsbetrieb bei Bloom -Filtern ist in dem Sinne verlustlos, dass der resultierende Bloom -Filter mit dem von Grund auf die Vereinigung der beiden Sets erstellten Blütenfilter mit dem von Grund auf erstellten Blütenfilter entspricht. Die Schnittstelle erfüllt eine schwächere Eigenschaft: Die falsch positive Wahrscheinlichkeit im resultierenden Blütefilter ist höchsten der Schnittpunkt der beiden Sätze.
- Einige Arten von überlagerter Code kann als Blütenfilter gesehen werden, der mit physischer Implementierung implementiert ist kandidierte Karten. Ein Beispiel ist Zatokodierung, erfunden von Calvin Mooers Im Jahr 1947, in dem die mit einer Information verbundene Kategorien von Karten auf einer Karte dargestellt wird, mit einem zufälligen Muster von vier Kerben für jede Kategorie.
Beispiele
- Fruchtfliegen Verwenden Sie eine modifizierte Version von Bloom -Filtern, um die Neuheit von Gerüchen mit zusätzlichen Merkmalen zu erkennen, einschließlich der Ähnlichkeit des neuartigen Geruchs zu zuvor erfahrenen Beispielen, und die Zeit seit früheren Erfahrungen mit demselben Geruch verstrichen.[11]
- Die Server von Akamai Technologies, a Inhalt liefern Anbieter, verwenden Sie Bloom-Filter, um zu verhindern, dass "ein Hit-Wunder" in seinen Festplattenspeichern gespeichert werden. Ein Hit-Wunder sind Webobjekte, die von Benutzern nur einmal angefordert wurden, was Akamai auf fast drei Viertel ihrer Caching-Infrastruktur angewendet hat. Verwenden eines Bloom-Filters zum Erkennen der zweiten Anforderung für ein Webobjekt und das zwischengespeicherte Objekt nur auf seine zweite Anfrage verhindert, dass One-Hit-Wunder den Eintritt in den Festplatten-Cache, die Arbeitsbelastung der Festplatte erheblich verringert und die Tarife der Festplatten-Cache erhöht.[12]
- Google Großer Tisch, Apache Hbase und Apache Cassandra und PostgreSQL[13] Verwenden Sie Bloom-Filter, um die Festplatten-Lookups für nicht existierende Zeilen oder Spalten zu reduzieren. Das Vermeiden von kostspieligen Datenträgern erhöht die Leistung eines Datenbankabfragevorgangs erheblich.[14]
- Das Google Chrome Der Webbrowser verwendete ein Bloom -Filter, um böswillige URLs zu identifizieren. Jede URL wurde zuerst gegen einen lokalen Blütenfilter überprüft, und nur, wenn der Blütenfilter ein positives Ergebnis zurückgegeben hat, war eine vollständige Überprüfung der durchgeführten URL (und der Benutzer warnte, wenn dies auch ein positives Ergebnis zurückgab).[15][16]
- Microsoft Bing (Suchmaschine) Verwendet mehrstufe hierarchische Blütenfilter für seinen Suchindex, Bitfunnel. Bloom -Filter lieferten kostengünstigere Kosten als der vorherige Bing -Index, der basierend auf Inverted Dateien.[17]
- Das Tintenfisch Netz Proxy Zwischenspeicher Verwendet Bloom -Filter für Cache -Verdauungen.[18]
- Bitcoin Gebrauchte Bloom -Filter, um die Brieftaschensynchronisation zu beschleunigen, bis Datenschutzschwachstellen mit der Implementierung von Bloom -Filtern entdeckt wurden.[19][20]
- Das Venti Das Archivspeichersystem verwendet Bloom -Filter, um zuvor gespeicherte Daten zu erkennen.[21]
- Das Spin -Modellprüfung Verwendet Bloom -Filter, um den erreichbaren Zustand für große Überprüfungsprobleme zu verfolgen.[22]
- Das Kaskadierung Analytics Framework verwendet Bloom -Filter, um asymmetrische Verknüpfungen zu beschleunigen, wobei eines der zusammengeschlossenen Datensätze erheblich größer als der andere ist (oft als Bloom -Join in der Datenbankliteratur bezeichnet).[23]
- Das Exim Mail Transfer Agent (MTA) verwendet Bloom-Filter in seiner Rate-Limit-Funktion.[24]
- Mittel Verwendet Bloom -Filter, um zu vermeiden, dass ein Benutzer zuvor gelesen wird.[25]
- Äther Verwendet Bloom -Filter, um schnell Protokolle auf der Ethereum -Blockchain zu finden.
Alternativen
Klassische Blütenfilter verwenden Platzbilde pro eingefügter Schlüssel, wo ist die falsch positive Rate des Blütenfilters. Der Raum, der für jede Datenstruktur, die die gleiche Rolle wie ein Blütefilter spielt pro Schlüssel.[26] Daher verwenden Bloomfilter 44% mehr Platz als eine äquivalente optimale Datenstruktur. Stattdessen haben Pagh et al. Stellen Sie eine Datenstruktur für optimale Raum bereit. Darüber hinaus hat ihre Datenstruktur konstant Referenzort unabhängig von der falsch positiven Rate, im Gegensatz zu Bloom -Filtern, bei denen eine niedrigere falsch positive Rate führt zu einer größeren Anzahl von Speicherzugriffe pro Abfrage, . Außerdem können Elemente im Gegensatz zu Bloom -Filtern ohne Raumstrafe gelöscht werden. Die gleichen verbesserten Eigenschaften der optimalen Raumverwendung, der ständigen Referenzort und der Fähigkeit, Elemente zu löschen, werden auch von der bereitgestellt Kuckuckfilter von Fan et al. (2014), eine Open -Source -Implementierung, die verfügbar ist.
Stern & Dill (1996) Beschreiben Sie eine probabilistische Struktur basierend auf Hash -Tische, Hash -Verdichtung, was Dillinger & Manolios (2004b) Identifizieren Sie als signifikant genauer als ein Bloom -Filter, wenn jeder optimal konfiguriert ist. Dillinger und Manolios weisen jedoch darauf hin, dass die angemessene Genauigkeit eines bestimmten Blütenfilters über eine Vielzahl von Ergänzungen für die probabilistische Aufzählung von Zustandsräumen unbekannter Größe attraktiv macht. Die Hash -Verdichtung ist daher attraktiv, wenn die Anzahl der Ergänzungen genau vorhergesagt werden kann. Obwohl die Hash-Verdichtung sehr schnell in der Software ist, ist es aufgrund der linearen Zugriffszeit für die schlimmste Case schlecht für Hardware geeignet.
Pech, Sanders & Singler (2007) Haben einige Varianten von Bloomfiltern untersucht, die entweder schneller sind oder weniger Platz nutzen als klassische Blütenfilter. Die Grundidee der schnellen Variante besteht darin, die K -Hash -Werte zu lokalisieren, die jedem Schlüssel zu einem oder zwei Blöcken mit der gleichen Größe wie der Speichercache -Blöcke des Prozessors zugeordnet sind (normalerweise 64 Bytes). Dies wird die Leistung vermutlich verbessern, indem die Anzahl der potenziellen Speicher verringert wird Cache Fehler. Die vorgeschlagenen Varianten haben jedoch den Nachteil von etwa 32% mehr Platz als klassische Blütenfilter.
Die speichereffiziente Variante beruht auf der Verwendung einer einzelnen Hash -Funktion, die für jeden Schlüssel einen Wert im Bereich generiert wird wo ist der angeforderte falsch positive Rate. Die Abfolge der Werte wird dann sortiert und komprimiert mithilfe Golomb -Codierung (oder eine andere Kompressionstechnik), um einen Raum in der Nähe zu besetzen Bits. Um den Bloom -Filter für einen bestimmten Schlüssel abzufragen, reicht es aus, zu überprüfen, ob der entsprechende Wert im Bloom -Filter gespeichert ist. Das Dekomprimieren des gesamten Blütefilters für jede Abfrage würde diese Variante völlig unbrauchbar machen. Um dieses Problem zu überwinden, ist die Wertfolge der Werte in kleine Blöcke gleicher Größe unterteilt, die separat komprimiert werden. Zur Abfragezeit muss nur ein halber Block im Durchschnitt dekomprimiert werden. Aufgrund des Dekompressionsaufwandes kann diese Variante langsamer sein als klassische Blütenfilter, dies kann jedoch durch die Tatsache kompensiert werden, dass eine einzelne Hash -Funktion berechnet werden muss.
Eine weitere Alternative zum klassischen Bloom -Filter ist der Kuckuckfilterbasierend auf platzeffizienten Varianten von Cuckoo Hashing. In diesem Fall wird eine Hash -Tabelle gebaut, die weder Schlüssel noch Werte, sondern kurze Fingerabdrücke (kleine Hashes) der Schlüssel hält. Wenn nach dem Schlüssel einen passenden Fingerabdruck findet, befindet sich der Schlüssel wahrscheinlich im Set. Eine nützliche Eigenschaft von Kuckucksfiltern ist, dass sie aktualisierbar sind. Einträge können dynamisch hinzugefügt werden (mit einer geringen Ausfallwahrscheinlichkeit aufgrund der Hash -Tabelle) und entfernt.
Graf & Lemire (2019) beschreibt einen Ansatz, der als XOR -Filter bezeichnet wird, bei dem sie Fingerabdrücke in einer bestimmten Art von speichern Perfekter Hash Tabelle, erzeugt einen Filter, der speichereffizienter ist ( Bits pro Schlüssel) und schneller als Bloom- oder Kuckucksfilter. (Die Zeitsparung ergibt sich aus der Tatsache, dass eine Suche genau drei Speicherzugriffe erfordert, was alle parallel ausführen kann.) Die Filtererstellung ist jedoch komplexer als Blüten- und Kuckucksfilter, und es ist nicht möglich, den Satz nach der Erstellung zu ändern.
Erweiterungen und Anwendungen
Es gibt über 60 Varianten von Bloomfiltern, viele Umfragen des Feldes und eine anhaltende Anwendungswanne (siehe z. B. Luo, et al [27]). Einige der Varianten unterscheiden sich ausreichend vom ursprünglichen Vorschlag, gegen Verstöße oder Gabeln der ursprünglichen Datenstruktur und ihrer Philosophie zu sein.[27] Eine Behandlung, die Blütenfilter mit anderen Arbeiten vereint zufällige Projektionen, Druckerkennung, und Lokalität sensibler Hashing bleibt noch zu tun (obwohl Dasgupta, obwohl et al[28] für einen von neurowissenschaften inspirierten Versuch).
Cache -Filterung
Inhaltsbereitstellungen einsetzen Web -Caches Auf der ganzen Welt, um Webinhalte mit größerer Leistung und Zuverlässigkeit zu leiten und Webinhalte zu bedienen. Eine wichtige Anwendung von Bloom -Filtern ist ihre Verwendung, um effizient zu bestimmen, welche Webobjekte in diesen Web -Caches gespeichert werden sollen. Fast drei Viertel der URLs aus einem typischen Web-Cache sind "ein Hit-Wunder", auf die Benutzer nur einmal und nie wieder zugegriffen werden. Es ist eindeutig verschwenderisch von Festplattenressourcen, um in einem Web-Cache ein Hit-Wunder zu speichern, da sie nie wieder zugegriffen werden. Um das Zwischenspeichern ein Hit-Wunder zu verhindern, wird ein Bloom-Filter verwendet, um alle URLs zu verfolgen, auf die Benutzer zugegriffen werden. Ein Webobjekt wird nur dann zwischengespeichert, wenn es mindestens einmal zugegriffen wurde, d. H. Das Objekt wird auf seine zweite Anfrage zwischengespeichert. Die Verwendung eines Blütenfilters auf diese Weise reduziert die Schreibarbeitsbelastung erheblich, da die meisten Eintreffer nicht in den Festplatten-Cache geschrieben werden. Darüber hinaus spart das Filtern der One-Hit-Wunder auch den Cache-Speicherplatz auf der Festplatte und erhöht die Cache-Trefferquoten.[12]
Vermeiden Sie falsch positive Ergebnisse in einem endlichen Universum
Kuss et al [29] beschrieben eine neue Konstruktion für den Bloom-Filter, der falsch positive Positive zusätzlich zur typischen Nichtbelegung falscher Negative vermeidet. Die Konstruktion gilt für ein endliches Universum, aus dem festgelegte Elemente entstanden sind. Es stützt sich auf bestehende nicht-adaptive kombinatorische Gruppen-Testschema von Eppstein, Goodrich und Hirschberg. Im Gegensatz zum typischen Blütefilter werden Elemente durch deterministische, schnelle und einfach zu kalkulierende Funktionen zu einem Bit-Array gehasht. Die maximale festgelegte Größe, für die falsch positive Ergebnisse vollständig vermieden werden, ist eine Funktion der Universumgröße und wird durch die Menge des zugewiesenen Speichers gesteuert.
Zählen von Blütenfiltern
Zählfilter bieten eine Möglichkeit, a zu implementieren löschen Betrieb auf einem Bloomfilter, ohne den Filter neu zu erstellen. In einem Zählfilter werden die Array -Positionen (Eimer) von einem einzigen Bit bis zu einem Multibit -Zähler erweitert. Tatsächlich können regelmäßige Blütenfilter als Zählfilter mit einer Bitsgröße angesehen werden. Zählfilter wurden durch eingeführt von Fan et al. (2000).
Der Einsatzbetrieb wird erweitert auf Zuwachs Der Wert der Eimer und der Suchbetrieb prüft, ob jeder der erforderlichen Eimer ungleich Null ist. Der Löschvorgang besteht dann darin, den Wert jeder der jeweiligen Eimer zu verringern.
Arithmetischer Überlauf der Eimer ist ein Problem und die Eimer sollten ausreichend groß sein, um diesen Fall selten zu machen. Wenn dies auftritt, müssen die Inkrement- und Dekrementoperationen den Eimer auf den maximal möglichen Wert einstellen lassen, um die Eigenschaften eines Blütenfilters zu erhalten.
Die Größe der Zähler beträgt normalerweise 3 oder 4 Bit. Daher verwenden die Bloomfilter 3- bis 4 -mal mehr Platz als statische Blütenfilter. Im Gegensatz dazu die Datenstrukturen von Pagh, Pagh & Rao (2005) und Fan et al. (2014) Erlauben Sie auch Löschungen, verwenden Sie jedoch weniger Platz als ein statischer Blütenfilter.
Ein weiteres Problem bei der Zählfilter ist die begrenzte Skalierbarkeit. Da die Zählblütefiltertabelle nicht erweitert werden kann, muss die maximale Anzahl von Schlüssel, die gleichzeitig im Filter gespeichert werden sollen, im Voraus bekannt sein. Sobald die entworfene Kapazität der Tabelle überschritten ist, wächst die falsch positive Rate schnell, wenn mehr Schlüssel eingefügt werden.
Bonomi et al. (2006) führte eine Datenstruktur ein, die auf D-Links-Hashing basiert, das funktional äquivalent ist, aber ungefähr halb so viel Platz wie Zählung von Blütenfiltern verwendet. Das Skalierbarkeitsproblem tritt in dieser Datenstruktur nicht auf. Sobald die entworfene Kapazität überschritten ist, könnten die Schlüssel in einer neuen Hash -Tabelle mit doppelter Größe wieder eingebaut werden.
Die raumeffiziente Variante von Pech, Sanders & Singler (2007) könnte auch verwendet werden, um Zählfilter durch Unterstützung von Insertionen und Löschungen zu implementieren.
Rottenstreich, Kanizo & Keslassy (2012) führte eine neue allgemeine Methode ein, die auf variablen Schritten basiert, die die falsch positive Wahrscheinlichkeit des Zählens von Blütefiltern und deren Varianten erheblich verbessert und gleichzeitig Löschungen unterstützt. Im Gegensatz zum Zählen von Bloom -Filtern werden die Hashed -Zähler bei jedem Elementeinfügung durch ein Hashed -Variable -Inkrement anstelle eines Einheitsinkrements erhöht. Um ein Element abzufragen, werden die genauen Werte der Zähler berücksichtigt und nicht nur deren Positivität. Wenn eine Summe, die durch einen Zählerwert dargestellt wird, nicht aus dem entsprechenden variablen Inkrement für das abgefressene Element bestehen kann, kann eine negative Antwort an die Abfrage zurückgegeben werden.
Kim et al. (2019) zeigt, dass falsch positives Bloom -Filter von k = 1 zu einem definierten Punkt abnimmt und nimmt von zu positiver Unendlichkeit und findet als Funktion der Zählschwelle.[30]
Dezentrale Aggregation
Blütefilter können in verteilt organisiert werden Datenstrukturen vollständig dezentrale Berechnungen von durchzuführen Aggregatfunktionen. Die dezentrale Aggregation stellt kollektive Messungen lokal in jedem Knoten eines verteilten Netzwerks zur Verfügung, ohne zu diesem Zweck ein zentrales rechnerisches Unternehmen einzubeziehen.[31]
Verteilte Blütefilter
Parallele Bloom -Filter können implementiert werden, um das Vielfache zu nutzen Verarbeitungselemente (PES) vorhanden in Parallele gemeinsame Maschinen. Eines der Haupthindernisse für einen parallelen Blütefilter ist die Organisation und Kommunikation der ungeordneten Daten, die im Allgemeinen gleichmäßig über alle PES bei der Einweihung oder bei Stapelinsertionen verteilt sind. Um die Daten zu bestellen, können zwei Ansätze verwendet werden .[32] Für beide Ansätze wird ein "Single -Shot" -Blomfilter verwendet, der nur einen Hash berechnet, der zu einem umgedrehten Bit pro Element führt, um das Kommunikationsvolumen zu verringern.
Verteilte Blütefilter werden von zuerst alle Elemente auf ihrem örtlichen PE initiiert und sie dann vor Ort nach ihren Hashes sortieren. Dies kann in der linearen Zeit unter Verwendung von z. Eimer -Sort und ermöglicht auch die lokale doppelte Erkennung. Die Sortierung wird verwendet, um die Hashes mit ihrem zugewiesenen PE als Trennzeichen zu gruppieren, um einen Blütefilter für jede Gruppe zu erstellen. Nach der Codierung dieser Blütenfilter unter Verwendung von z. Golomb -Codierung Jeder Blütefilter wird als Paket an die PE gesendet, die für die Hash -Werte verantwortlich ist, die in ihn eingefügt wurden. Ein Pe P ist für alle Hashes zwischen den Werten verantwortlich und , wobei s die Gesamtgröße des Blütenfilters über alle Daten ist. Da jedes Element nur einmal gehasht ist und daher nur ein einzelnes Bit festgelegt ist, um zu überprüfen, ob ein Element in den Bloom -Filter eingefügt wurde, muss nur der für den Hash -Wert verantwortliche PE betrieben werden. Einzelinsertionsvorgänge können auch effizient durchgeführt werden, da der Blütenfilter von nur einem PE geändert werden muss, verglichen mit Replikieren von Blütenfiltern, bei denen jeder PE den Blütenfilter aktualisieren müsste. Durch die Verteilung des globalen Blütefilters über alle PES, anstatt ihn auf jeder PE separat zu speichern, kann die Größe der Blütenfilter weitaus größer sein, was zu einer größeren Kapazität und einer geringeren falsch positiven Rate führt.
Verteilte Blütefilter können verwendet werden, um die doppelten Erkennungsalgorithmen zu verbessern[33] Durch Filtern der "einzigartigsten" Elemente. Diese können berechnet werden, indem nur die Hashes von Elementen kommuniziert werden, nicht die Elemente selbst, die weitaus größer sind, und sie aus dem Satz entfernen, wodurch die Arbeitsbelastung für den danach verwendeten doppelten Erkennungsalgorithmus verringert wird.
Während der Kommunikation der Hashes suchen die PES nach Bits, die in mehr als einem der empfangenden Pakete festgelegt sind, da dies bedeuten würde, dass zwei Elemente den gleichen Hash hatten und daher Duplikate sein könnten. Wenn dies eine Nachricht mit dem Index des Bits enthält, der auch das Hash des Elements ist, das ein Duplikat sein könnte, wird an die PES gesendet, die ein Paket mit dem festgelegten Bit gesendet haben. Wenn mehrere Indizes von einem Absender an denselben PE gesendet werden, kann es auch vorteilhaft sein, die Indizes zu codieren. Alle Elemente, bei denen ihr Hash nicht zurückgesandt wurde[34] kann verwendet werden. Zunächst werden alle Elemente, bei denen ihr Hash -Wert zurückgesandt wurde, an den PE gesendet, für den ihr Hash verantwortlich ist. Jedes Element und sein Duplikat sind nun garantiert auf demselben PE. Im zweiten Schritt verwendet jeder PE einen sequentiellen Algorithmus für die doppelte Erkennung an den empfangenden Elementen, die nur ein Bruchteil der Anzahl der Startelemente sind. Durch die Erlaubnis einer falsch positiven Rate für die Duplikate kann das Kommunikationsvolumen weiter reduziert werden, da die PEs überhaupt keine Elemente mit doppelten Hashes senden müssen und stattdessen jedes Element mit einem doppelten Hash einfach als Duplikat gekennzeichnet werden kann. Infolgedessen entspricht die falsch positive Rate für die doppelte Erkennung der falschen positiven Rate des gebrauchten Blütefilters.
Der Prozess der Filterung der "eindeutigsten" Elemente kann auch mehrmals wiederholt werden, indem die Hash -Funktion in jedem Filterschritt geändert wird. Wenn nur ein einzelner Filterschritt verwendet wird, muss er eine kleine falsch positive Rate archivieren. Wenn der Filterschritt jedoch wiederholt wird, wenn der erste Schritt eine höhere falsch positive Rate ermöglichen kann, während der letztere einen höheren hat, aber auch mit weniger Elementen funktioniert Wie viele bereits durch den früheren Filterschritt entfernt wurden. Während die Verwendung von mehr als zwei Wiederholungen das Kommunikationsvolumen weiter verringern kann, wenn die Anzahl der Duplikate in einem Satz gering ist, ist die Auszahlung für die zusätzlichen Komplikationen niedrig.
Replikieren von Blütefiltern Organisieren Sie ihre Daten mit einem bekannten Verwenden Hypercube Algorithmus für Klatsch, z.[35] Zuerst berechnet jeder PE den Blütefilter über alle lokalen Elemente und speichert ihn. Wenn Sie eine Schleife wiederholen, in der in jedem Schritt I die PES ihren lokalen Blütefilter über die Dimension I senden und den Blütefilter verschmelzen, den sie über die Dimension mit ihrem lokalen Blütefilter erhalten, ist es möglich, die Elemente zu verdoppeln, die jeder BLOOM -Filter in jeder Iteration enthält. Nach dem Senden und Empfangen von Blütenfiltern über alle Dimensionen Jedes PE enthält den globalen Bloom -Filter über alle Elemente.
Replikating Bloom -Filter sind effizienter, wenn die Anzahl der Abfragen viel größer ist als die Anzahl der Elemente, die der Bloom -Filter enthält Zugriffe, mit als falsch positive Rate des Blütenfilters.
Datensynchronisation
Blütefilter können für ungefähre Verwendung verwendet werden Datensynchronisation wie in Byers et al. (2004). Zählblütenfilter können verwendet werden, um die Anzahl der Unterschiede zwischen zwei Sätzen zu approximieren, und dieser Ansatz wird in beschrieben Agarwal & Trachtenberg (2006).
Bloom filtert zum Streaming von Daten
Bloom -Filter können an den Kontext von Streaming -Daten angepasst werden. Zum Beispiel, Deng & Rafiei (2006) Vorgeschlagene stabile Bloomfilter, die aus einem Zählblütefilter bestehen, bei dem die Einführung eines neuen Elements die zugehörigen Zähler auf einen Wert setzt cund dann nur eine feste Menge s von Zählern wird um 1 verringert, daher enthält das Gedächtnis hauptsächlich Informationen über jüngste Elemente (intuitiv könnte man davon ausgehen, dass die Lebensdauer eines Elements innerhalb eines SBF von N Zähler sind da ). Eine andere Lösung ist der alternde Bloom -Filter, der aus zwei Blütenfilter besteht, die jeweils die Hälfte des gesamten verfügbaren Speichers belegen: Wenn ein Filter voll ist, wird der zweite Filter gelöscht und zu diesem neu leeren Filter werden dann neuere Elemente hinzugefügt.[36]
Es wurde jedoch gezeigt[37] das unabhängig vom Filter danach n Einfügungen, die Summe des falsch positiven positiven und falsch negativ Die Wahrscheinlichkeiten sind unten nach unten begrenzt wo L ist die Menge aller möglichen Elemente (die Alphabetgröße), m die Speichergröße (in Bits), vorausgesetzt . Dieses Ergebnis zeigt das für L groß genug und n In Unendlichkeit gehen, dann konvergiert die untere Grenze zu , das ist die charakteristische Beziehung eines zufälligen Filters. Daher ist es unmöglich, dass ein Filter besser als Zufälligkeit abbaut, wenn das Alphabet zu groß ist, um im Gedächtnis zu speichern (was im Kontext von probabilistischen Filtern angenommen wird), um im Gedächtnis zu speichern (was im Kontext von probabilistischen Filtern angenommen wird). Dieses Ergebnis kann genutzt werden, indem nur erwartet wird, dass ein Filter an einem Schiebefenster statt im gesamten Strom arbeitet. In diesem Fall der Exponent n in der obigen Formel wird durch ersetzt durch w, was eine Formel gibt, die von 1 abweichen könnte, wenn w ist nicht zu klein.
Blühendere Filter
Chazelle et al. (2004) entwarf eine Verallgemeinerung von Bloomfiltern Assoziatives Array. Wie Bloom -Filter erreichen diese Strukturen einen kleinen Raumaufwand, indem sie eine kleine Wahrscheinlichkeit von falsch positiven Aspekten akzeptieren. Im Fall von "blühenderen Filtern", a Falsch positiv ist definiert als Rückgabe eines Ergebniss, wenn sich der Schlüssel nicht in der Karte befindet. Die Karte wird niemals den falschen Wert für eine Schlüssel zurückgeben, die ist in der Karte.
Kompakte Angreifer
Boldi & Vigna (2005) vorgeschlagen a Gitter-basierte Verallgemeinerung von Blütenfiltern. EIN Kompakter Approxator Associates für jedes Schlüssel ein Element eines Gitters (die Standardblüterfilter sind der Fall des Booleschen Zwei-Element-Gitters). Anstelle eines Bit -Arrays haben sie eine Reihe von Gitterelementen. Wenn Sie einen neuen Zusammenhang zwischen einem Schlüssel und einem Element des Gitters hinzufügen, berechnen sie das Maximum des aktuellen Inhalts der k Array -Standorte, die dem Schlüssel mit dem Gitterelement zugeordnet sind. Wenn Sie den Wert lesen, der einem Schlüssel zugeordnet ist, berechnen sie das Minimum der in der gefundenen Werte k dem Schlüssel verbundene Orte. Der resultierende Wert entspricht dem ursprünglichen Wert.
Parallel partitionierte Blütenfilter
Diese Implementierung verwendete für jede Hash -Funktion ein separates Array. Diese Methode ermöglicht parallele Hash -Berechnungen sowohl für Einfügungen als auch für Anfragen.[38]
Skalierbare Blütenfilter
Almeida et al. (2007) schlug eine Variante von Blütenfiltern vor, die sich dynamisch an die Anzahl der gespeicherten Elemente anpassen können und gleichzeitig eine minimale falsche positive Wahrscheinlichkeit gewährleistet. Die Technik basiert auf Sequenzen von Standard -Bloom -Filtern mit zunehmender Kapazität und engeren falsch positiven Wahrscheinlichkeiten, um sicherzustellen, dass eine maximale falsch positive Wahrscheinlichkeit vorher eingestellt werden kann, unabhängig von der Anzahl der zu eingefügten Elemente.
Räumliche Blütenfilter
Räumliche Blütenfilter (SBF) wurden ursprünglich vorgeschlagen von Palmieri, Calderoni & Maio (2014) als Datenstruktur zum Speichern Standortinformationeninsbesondere im Kontext von kryptografischen Protokollen für den Standort Privatsphäre. Das Hauptmerkmal von SBFS ist jedoch ihre Lagerfähigkeit Mehrere Sätze In einer einzelnen Datenstruktur, die sie für eine Reihe verschiedener Anwendungsszenarien geeignet macht.[39] Die Mitgliedschaft eines Elements zu einem bestimmten Satz kann abgefragt werden, und die falsch positive Wahrscheinlichkeit hängt vom Satz ab: Die ersten Sätze, die während der Konstruktion in den Filter eingegeben werden sollen, haben höhere falsch positive Wahrscheinlichkeiten als am Ende eingegebene Sätze.[40] Diese Eigenschaft ermöglicht eine Priorisierung der Sets, wobei Sätze mit mehr "wichtigeren" Elementen erhalten werden können.
Geschichtete Blütefilter
Ein geschichteter Blütefilter besteht aus mehreren Blütenfilterschichten. Layered Bloom -Filter ermöglichen das Verfolgen, wie oft ein Element zum Bloom -Filter hinzugefügt wurde, indem überprüft wird, wie viele Ebenen das Element enthalten. Mit einem geschichteten Blütenfilter gibt ein Check -Operation normalerweise die tiefste Schichtnummer zurück, in der das Element gefunden wurde.[41]
Dämpfte Blütenfilter
Ein abgeschwächter Blütefilter der Tiefe D kann als Array von D normalen Blütenfiltern angesehen werden. Im Zusammenhang mit der Serviceerkennung in einem Netzwerk speichert jeder Knoten reguläre und abgeschwächte Blütenfilter lokal. Der reguläre oder lokale Blütefilter gibt an, welche Dienste vom Knoten selbst angeboten werden. Der abgeschwächte Filter von Level I gibt an, welche Dienste auf Knoten gefunden werden können, die I-Hops vom aktuellen Knoten entfernt sind. Der I-TH-Wert wird konstruiert, indem eine Vereinigung lokaler Blütenfilter für Knoten I-Hops vom Knoten weggenommen wird.[42]
Nehmen wir ein kleines Netzwerk, das in der unten stehenden Grafik als Beispiel angezeigt wird. Angenommen, wir suchen nach einem Dienst A, dessen ID -Hashes zu Bits 0,1 und 3 (Muster 11010). Lassen Sie den N1 -Knoten der Ausgangspunkt sein. Zunächst prüfen wir, ob der Service A von N1 durch Überprüfen des lokalen Filters angeboten wird. Da die Muster nicht übereinstimmen, überprüfen wir den abgeschwächten Blütenfilter, um festzustellen, welcher Knoten der nächste Hop sein soll. Wir sehen, dass N2 keinen Service A bietet, sondern auf dem Weg zu Knoten liegt. Daher wechseln wir zu N2 und wiederholen die gleiche Prozedur. Wir stellen schnell fest, dass N3 den Service anbietet und daher das Ziel befindet.[43]
Durch die Verwendung von abgeschwächten Blütenfiltern, die aus mehreren Schichten bestehen, können Dienste mit mehr als einer Sprungentfernung entdeckt werden, während die Sättigung des Blütenfilters durch Abschwächung von Bits (Verschiebung) Bits, die von Quellen weiter entfernt gesetzt sind, vermieden werden.[42]
Chemische Struktur suchen
Bloom -Filter werden häufig verwendet, um große Datenbanken mit chemischen Struktur zu durchsuchen (siehe Chemische Ähnlichkeit). Im einfachsten Fall sind die dem Filter hinzugefügten Elemente (in diesem Feld als Fingerabdruck bezeichnet) nur die im Molekül vorhandenen Atomnummern oder ein Hash, das auf der Atomzahl jedes Atoms und der Anzahl und der Art seiner Bindungen basiert. Dieser Fall ist zu einfach, um nützlich zu sein. Fortgeschrittene Filter codieren auch Atomzahlen, größere Unterstrukturmerkmale wie Carboxylgruppen und Diagrammeigenschaften wie die Anzahl der Ringe. In Hash-basierten Fingerabdrücken wird eine Hash-Funktion basierend auf Atom- und Bondeigenschaften verwendet, um einen Untergraph in a zu verwandeln Prng Saatgut und die ersten Ausgangswerte, die zum Einstellen von Bits im Bloom -Filter verwendet werden.
Die molekularen Fingerabdrücke begannen Ende der 1940er Jahre, um nach chemischen Strukturen zu suchen, die auf geschlagenen Karten gesucht wurden. Erst um 1990 führte das Tageslicht Chemical Information Systems, Inc. eine Hash-basierte Methode zur Erzeugung der Bits ein, anstatt eine vorkundige Tabelle zu verwenden. Im Gegensatz zum Wörterbuchansatz kann die Hash -Methode Bits für Substrukturen zuweisen, die zuvor nicht gesehen wurden. In den frühen neunziger Jahren wurde der Begriff "Fingerabdruck" als "Strukturschlüssel" unterscheid . Im Gegensatz zu Bloom-Filtern ermöglicht die Tageslicht-Hash-Methode die Anzahl der pro Feature zugewiesenen Bits, die eine Funktion der Merkmalsgröße sind. Die meisten Implementierungen von Tageslicht-ähnlichen Fingerabdrücken verwenden jedoch eine feste Anzahl von Bits pro Funktion, wodurch sie zum Bloom-Filter sind. Die ursprünglichen Tageslichtfingerabdrücke könnten sowohl für Ähnlichkeit als auch für Screening -Zwecke verwendet werden. Viele andere Fingerabdrucktypen, wie das beliebte ECFP2, können für Ähnlichkeiten verwendet werden, jedoch nicht für das Screening, da sie lokale Umweltmerkmale enthalten, die falsch negative Einführung bei der Verwendung als Bildschirm einführen. Selbst wenn diese mit demselben Mechanismus konstruiert sind, sind diese keine Blütefilter, da sie nicht zum Filtern verwendet werden können.
Siehe auch
- Graf -min -Skizze
- Feature Hashing
- Minhash
- Quotientenfilter
- Liste überspringen
- Blütenfilter in Bioinformatik
- Kuckuckfilter
Anmerkungen
- ^ Bloom (1970).
- ^ Bonomi et al. (2006).
- ^ Dillinger & Manolios (2004a); Kirsch & Mitzenmacher (2006).
- ^ Mitzenmacher & Upfal (2005).
- ^ Blustein & El-Maazawi (2002), S. 21–22
- ^ Gopinathan, Kiran; Sergey, Ilya (2020-07-21). "Gewissheit und Unsicherheit bei ungefähren Mitgliedern von Abfragestrukturen der Mitgliedschaft". Computergestützte Überprüfung. Vorlesungsnotizen in Informatik. Springer, Cham. 12225: 279–303. doi:10.1007/978-3-030-53291-8_16. ISBN 978-3-030-53290-1. PMC 7363400.
- ^ Mitzenmacher & Upfal (2005), S. 109–111, 308.
- ^ Mitzenmacher & Upfal (2005), p. 308.
- ^ Starobinski, Trachtenberg & Agarwal (2003)
- ^ Goel & Gupta (2010)
- ^ Dasgupta, Sanjoy; Sheehan, Timothy C.; Stevens, Charles F.; Navlakha, Saket (2018-12-18). "Eine neuronale Datenstruktur zur Neuheitserkennung". Verfahren der National Academy of Sciences. 115 (51): 13093–13098. doi:10.1073/pnas.1814448115. ISSN 0027-8424. PMC 6304992. PMID 30509984.
- ^ a b c Maggs & Sitaraman (2015).
- ^ "BLOOM INDEX -FORT -Modul". Postgresql.org. 2016-04-01. Archiviert von das Original Am 2018-09-09. Abgerufen 2016-06-18.
- ^ Chang et al. (2006); Apache Software Foundation (2012).
- ^ Yakunin, Alex (2010-03-25). "Alex Yakunins Blog: Nice Bloom Filter Application". Blog.alexyakunin.com. Archiviert von das Original Am 2010-10-27. Abgerufen 2014-05-31.
- ^ "Ausgabe 10896048: Übergang sicheres Browsen vom Bloom -Filter zum Präfix -Set. - Code Review". Chromiumcodereview.appspot.com. Abgerufen 2014-07-03.
- ^ Goodwin, Bob; Hopcroft, Michael; Luu, Dan; Clemmer, Alex; Curmei, Mihaela; Elnikety, Sameh; Yuxiong, er (2017). "Bitfunnel: Überprüfung von Unterschriften für die Suche" (PDF). Sigir: 605–614. doi:10.1145/3077136.3080789. S2CID 20123252.
- ^ Wessels (2004).
- ^ "Bip 0037". GitHub. 2012-10-24. Abgerufen 2018-05-29.
- ^ "Bloom Filter | Fluss Glossar". Fluss finanziell. Abgerufen 2020-11-14.
- ^ "Plan 9/sys/mAN/8/venti". Plan9.bell-labs.com. Archiviert von das Original Am 2014-08-28. Abgerufen 2014-05-31.
- ^ "Spin - formelle Überprüfung".
- ^ Mullin (1990).
- ^ "Exim -Quellcode". Github. Abgerufen 2014-03-03.
- ^ "Was sind Bloom -Filter?". Mittel. 2015-07-15. Abgerufen 2015-11-01.
- ^ Pagh, Pagh & Rao (2005).
- ^ a b Luo, Lailong; Guo, Deke; Ma, Richard T.B.; Rottenstreich, Ori; Luo, Xueshan (13. April 2018). "Optimieren von Bloom -Filter: Herausforderungen, Lösungen und Vergleiche". Arxiv:1804.04777 [cs.ds].
- ^ Dasgupta, Sanjoy; Sheehan, Timothy C.; Stevens, Charles F.; Navlakhae, Saket (2018). "Eine neuronale Datenstruktur zur Neuheitserkennung". Verfahren der National Academy of Sciences. 115 (51): 13093–13098. doi:10.1073/pnas.1814448115. PMC 6304992. PMID 30509984.
- ^ Kiss, S. Z.; Hosszu, E.; Tapolcai, J.; Rónyai, L.; Rottenstreich, O. (2018). "Blütefilter mit einer falsch positiven freien Zone" (PDF). IEEE -Verfahren von Infocom. Abgerufen 4. Dezember 2018.
- ^ Kim, Kibeom; Jeong, Yongjo; Lee, Youngjoo; Lee, Sunggu (2019-07-11). "Analyse der Zählung von Blütenfiltern, die zur Zählschwelle verwendet werden". Elektronik. 8 (7): 779. doi:10.3390/Electronics8070779. ISSN 2079-9292.
- ^ Pournaras, Warnier & Brazier (2013).
- ^ Sanders, Peter und Schlag, Sebastian und Müller, Ingo (2013). "Kommunikation effiziente Algorithmen für grundlegende Big -Data -Probleme". 2013 IEEE International Conference über Big Data: 15–23. doi:10.1109/bigdata.2013.6691549. ISBN 978-1-4799-1293-3. S2CID 15968541.
{{}}
: Cs1 montiert: Mehrfachnamen: Autorenliste (Link) - ^ Schlag, Sebastian (2013). "Verteilte doppelte Entfernung". Karlsruhe Institut für Technologie.
- ^ Shatdal, Ambuj und Jeffrey F. Naughton (1994). "Verarbeitungsaggregate in parallelen Datenbanksystemen". Abteilung für Computerwissenschaften der Universität von Wisconsin-Madison: 8.
{{}}
: Cs1 montiert: Mehrfachnamen: Autorenliste (Link) - ^ V. Kumar, A. Grama, A. Gupta und G. Karypis (1994). Einführung in das parallele Computer. Design und Analyse von Algorithmen. Benjamin/Cummings.
{{}}
: Cs1 montiert: Mehrfachnamen: Autorenliste (Link) - ^ Yoon, Myungkeun (2010). "Alternblühenfilter mit zwei aktiven Puffern für dynamische Mengen". IEEE -Transaktionen zu Wissen und Daten Engineering. 22 (1): 134–138. doi:10.1109/tkde.2009.136. S2CID 15922054.
- ^ Géraud-Stewart, Rémi; Lombardplattet, Marius; Naccache, David (2020). "Annäherung an optimale doppelte Erkennung in einem Schieberfenster" (PDF). Computer- und Kombinatorik. Vorlesungsnotizen in Informatik. 12273: 64–84. Arxiv:2005.04740. doi:10.1007/978-3-030-58150-3_6. ISBN 978-3-030-58149-7. S2CID 218581915.
- ^ Kirsch, Adam; Mitzenmacher †, Michael. "Weniger Hashing, gleiche Leistung: Aufbau eines besseren Blütenfilters" (PDF). Harvard School of Engineering and Applied Sciences. Wiley Interscience.
- ^ Calderoni, Palmieri & Maio (2015).
- ^ Calderoni, Palmieri & Maio (2018).
- ^ Zhiwang, Jungang & Jian (2010).
- ^ a b Koucheryavy et al. (2009).
- ^ Kubiatowicz et al. (2000).
Verweise
- Agarwal, Sachin; Trachtenberg, Ari (2006), "Annäherung an die Anzahl der Unterschiede zwischen Fernmengen" (PDF), IEEE Informationstheorie Workshop, Punta del Este, Uruguay: 217, Citeseerx 10.1.1.69.1033, doi:10.1109/itw.2006.1633815, ISBN 978-1-4244-0035-5, S2CID 2048278
- Ahmadi, Mahmood; Wong, Stephan (2007), "Eine Cache -Architektur zum Zählen von Blütenfiltern", 15. Internationale Konferenz über Netzwerke (ICON-2007), p. 218, Citeseerx 10.1.1.125.2470, doi:10.1109/icon.2007.4444089, ISBN 978-1-4244-1229-7, S2CID 2967865
- Almeida, Paulo; Baquero, Carlos; Preguica, Nuno; Hutchison, David (2007), "Skalierbare Blütenfilter" (PDF), Informationsverarbeitungsbriefe, 101 (6): 255–261, doi:10.1016/j.ipl.2006.10.007, HDL:1822/6627
- Apache Software Foundation (2012), "11.6. Schema Design", Der Apache HBase Reference Guide, Revision 0.94.27
- Bloom, Burton H. (1970), "Raum-/Zeit-Kompromisse in der Hash-Codierung mit zulässigen Fehlern", Kommunikation der ACM, 13 (7): 422–426, Citeseerx 10.1.1.641.9096, doi:10.1145/362686.362692, S2CID 7931252
- Blustein, James; El-Maazawi, Amal (2002), "Optimaler Fall für allgemeine Bloomfilter", BLOOM -Filter - ein Tutorial, Analyse und Umfrage, Fakultät für Informatik der Dalhousie University, S. 1–31
- Boldi, Paolo; Vigna, Sebastiano (2005), "Veränderliche Zeichenfolgen in Java: Design, Implementierung und leichte Text-Suchalgorithmen", Wissenschaft der Computerprogrammierung, 54 (1): 3–23, doi:10.1016/j.scico.2004.05.003
- Bonomi, Flavio; Mitzenmacher, Michael; Panigrahy, Rina; Singh, Sushil; Varghese, George (2006), "Eine verbesserte Konstruktion zum Zählen von Blütenfiltern", Algorithmen - ESA 2006, 14. jährliches europäisches Symposium (PDF), Vorlesungsnotizen in Informatik, vol. 4168, S. 684–695, doi:10.1007/11841036_61, ISBN 978-3-540-38875-3
- Broder, Andrei; Mitzenmacher, Michael (2005), "Netzwerkanwendungen von Bloom -Filtern: Eine Umfrage" (PDF), Internet -Mathematik, 1 (4): 485–509, doi:10.1080/15427951.2004.10129096, S2CID 1560675
- Byers, John W.; Considine, Jeffrey; Mitzenmacher, Michael; Rost, Stanislav (2004), "Informierte Inhalte über adaptive Overlay -Netzwerke hinweg", IEEE/ACM -Transaktionen zur Vernetzung, 12 (5): 767, Citeseerx 10.1.1.207.1563, doi:10.1109/tnet.2004.836103, S2CID 47088273
- Calderoni, Luca; Palmieri, Paolo; Maio, Dario (2015), "Standort Privatsphäre ohne gegenseitiges Vertrauen: Der räumliche Blütefilter" (PDF), Computerkommunikation, 68: 4–16, doi:10.1016/j.com.2015.06.011, HDL:10468/4762, ISSN 0140-3664
- Calderoni, Luca; Palmieri, Paolo; Maio, Dario (2018), "Probabilistische Eigenschaften der räumlichen Blütenfilter und ihre Relevanz für kryptografische Protokolle", IEEE -Transaktionen zu Informationsforensik und Sicherheit, 13 (7): 1710–1721, doi:10.1109/tifs.2018.2799486, HDL:10468/5767, ISSN 1556-6013, S2CID 3693354* Chang, Fay; Dean, Jeffrey; Ghemawat, Sanjay; Hsieh, Wilson; Wallach, Deborah; Burrows, Mike; Chandra, Tushar; Fikes, Andrew; Gruber, Robert (2006), "Bigtable: Ein verteiltes Speichersystem für strukturierte Daten", Siebter Symposium zum Design und zur Implementierung des Betriebssystems
- Charles, Denis Xavier; Chellapilla, Kumar (2008), "Bloomier Filter: Ein zweiter Blick", in Halperin, Dan; Mehlhorn, Kurt (Hrsg.), Algorithmen: ESA 2008, 16. jährliches europäisches Symposium, Karlsruhe, Deutschland, 15. bis 17. September 2008, Proceedings, Vorlesungsnotizen in Informatik, Vol. 5193, Springer, S. 259–270, Arxiv:0807.0928, doi:10.1007/978-3-540-87744-8_22, ISBN 978-3-540-87743-1, S2CID 643445
- Chazelle, Bernard; Kilian, Joe; Rubinfeld, Ronitt; Tal, Ayellet (2004), "Der blühendere Filter: Eine effiziente Datenstruktur für statische Unterstützung für die Nachschlagungstabellen", Verfahren des fünfzehnten jährlichen ACM-SIAM-Symposiums über diskrete Algorithmen (PDF), S. 30–39
- Cohen, Saar; Matias, Yossi (2003), "Spectral Bloom Filter", Proceedings der ACM Sigmod International Conference von 2003 über das Management von Daten (PDF), S. 241–252, doi:10.1145/872757.872787, ISBN 978-1581136340, S2CID 1058187
- Deng, Fan; Rafiei, Davood (2006), "ungefähr Duplikate für das Streaming von Daten mit stabilen Bloomfiltern erkennen", Verfahren der ACM Sigmod -Konferenz (PDF), S. 25–36
- Dharmapurikar, Sarang; Lied, Haoyu; Turner, Jonathan; Lockwood, John (2006), "Schnelle Paketklassifizierung mit Bloom -Filtern", Verfahren des ACM/IEEE -Symposiums 2006 über Architektur für Netzwerk- und Kommunikationssysteme (PDF), S. 61–70, Citeseerx 10.1.1.78.9584, doi:10.1145/1185347.1185356, ISBN 978-1595935809, S2CID 7848110, archiviert von das Original (PDF) am 2007-02-02
- Dietzfelbinger, Martin; Pagh, Rasmus (2008), "prägnante Datenstrukturen für das Abrufen und ungefähre Mitgliedschaft", in Aceto, Luca; Damgård, Ivan; Goldberg, Leslie Ann; Halldórsson, Magnús M.; Ingólfsdóttir, Anna; Walukiewicz, Igor (Hrsg.), Automaten, Sprachen und Programmierung: 35. Internationales Colloquium, ICICP 2008, Reykjavik, Island, 7. bis 11. Juli 2008, Proceedings, Teil I, Track A: Algorithmen, Automaten, Komplexität und Spiele, Vorlesungsnotizen in Informatik, Vol. 5125, Springer, S. 385–396, Arxiv:0803.3693, doi:10.1007/978-3-540-70575-8_32, ISBN 978-3-540-70574-1, S2CID 1699996
- Dillinger, Peter C.; Manolios, Panagiotis (2004a), "schnelle und genaue Bitstate -Überprüfung für Spin", Proceedings des 11. International Spin Workshop zur Modellüberprüfungssoftware, Springer-Verlag, Vorlesungsnotizen in Informatik 2989
- Dillinger, Peter C.; Manolios, Panagiotis (2004b), "Bloom -Filter in der probabilistischen Überprüfung", Verfahren der 5. Internationalen Konferenz über formale Methoden im computergestützten Design, Springer-Verlag, Vorlesungsnotizen in Informatik 3312
- Donnet, Benoit; Baynat, Bruno; Friedman, Timur (2006), "Retuschierte Blütenfilter: Vernetzte Anwendungen ermöglichen, flexibel gegen falsche Ergebnisse gegen falsche Negative zu verteilen", Kontext 06 - 2. Konferenz über zukünftige Netzwerktechnologien, archiviert von das Original am 2009-05-17
- Eppstein, David; Goodrich, Michael T. (2007), "Raumeffizientes Straggler-Identifikation in Roundtrip-Datenströmen über Newtons Identität und invertierbare Blütefilter", Algorithmen und Datenstrukturen, 10. International Workshop, Wads 2007, Vorlesungsnotizen in Informatik, Vol. 4619, Springer-Verlag, S. 637–648, Arxiv:0704.3313, Bibcode:2007ArXIV0704.3313E
- Fan, Bin; Andersen, Dave G.; Kaminsky, Michael; Mitzenmacher, Michael D. (2014), "Kuckucksfilter: praktisch besser als Bloom", Proc. 10. ACM int. Conf. Emerging Networking -Experimente und -Technologien (Conext '14), S. 75–88, doi:10.1145/2674005.2674994, ISBN 9781450332798. Open Source -Implementierung Erhältlich auf GitHub.
- Fan, li; Cao, Pei; Almeida, Jussara; Broder, Andrei (2000), "Zusammenfassender Cache: Ein skalierbares Web-Cache-Sharing-Protokoll in großem Bereich". (PDF), IEEE/ACM -Transaktionen zur Vernetzung, 8 (3): 281–293, Citeseerx 10.1.1.41.1487, doi:10.1109/90.851975, S2CID 4779754, archiviert von das Original (PDF) Am 2017-09-22, abgerufen 2018-07-30. Eine vorläufige Version erschien bei Sigcomm '98.
- Goel, Ashish; Gupta, Pankaj (2010), "Kleine Untergruppenabfragen und Blütenfilter mit ternären assoziativen Erinnerungen mit Anwendungen" (PDF), ACM Sigmetrics Performance Evaluation Review, 38: 143, Citeseerx 10.1.1.296.6513, doi:10.1145/1811099.1811056
- Graf, Thomas Mueller; Lemire, Daniel (2020), "Xor Filter", ACM Journal of Experimental Algorithmics, 25: 1–16, Arxiv:1912.08258, Bibcode:2019ArXIV191208258m, doi:10.1145/3376122, S2CID 209405019
- Grandi, Fabio (2018), "Bei der Analyse von Bloom -Filtern" (PDF), Informationsverarbeitungsbriefe, 129: 35–39, doi:10.1016/j.ipl.2017.09.004
- Kirsch, Adam; Mitzenmacher, Michael (2006), "Weniger Hashing, gleiche Leistung: Aufbau eines besseren Blütenfilters", in Azar, Yossi; Erlebach, Thomas (Hrsg.), Algorithmen - ESA 2006, 14. jährliches europäisches Symposium (PDF), Vorlesungsnotizen in Informatik, Vol. 4168, Springer-Verlag, Vorlesungsnotizen in Informatik 4168, S. 456–467, doi:10.1007/11841036, ISBN 978-3-540-38875-3, archiviert von das Original (PDF) am 2009-01-31
- Koucheryavy, Y.; Giambene, G.; Staehle, D.; Barcelo-Arroyo, F.; Braun, T.; Siris, V. (2009), "Verkehr und QOS -Management in drahtlosen Multimedia -Netzwerken", Kosten 290 Abschlussbericht: 111
- Kubiatowicz, J.; Bindel, D.; Czerwinski, Y.; Geels, S.; Eaton, D.; Gummadi, R.; Rhea, S.; Weatherspoon, H.; et al. (2000), "Oceanstore: Eine Architektur für den anhaltenden Speicher für den globalen Maßstab" (PDF), ACM Sigplan nennt: 190–201, archiviert aus das Original (PDF) Am 2012-03-11, abgerufen 2011-12-01
- Maggs, Bruce M.; Sitaraman, Ramesh K. (Juli 2015), "Algorithmische Nuggets in der Bereitstellung von Inhalten" (PDF), Sigcomm Computerkommunikation Review, 45 (3): 52–66, Citeseerx 10.1.1.696.9236, doi:10.1145/2805789.2805800, S2CID 65760, archiviert von das Original (PDF) am 2021-08-14
- Mitzenmacher, Michael; Upfal, Eli (2005), Wahrscheinlichkeit und Computer: Randomisierte Algorithmen und probabilistische Analyse, Cambridge University Press, S. 107–112, ISBN 9780521835404
- Mortensen, christlicher Wurm; Pagh, Rasmus; Pătraşcu, Mihai (2005), "Über die Berichterstattung über den Dynamikbereich in einer Dimension", " Verfahren des siebenunddreißigjährigen jährlichen ACM-Symposiums zur Theorie des Computers, S. 104–111, Arxiv:CS/0502032, doi:10.1145/1060590.1060606, ISBN 978-1581139600, S2CID 56473
- Mullin, James K. (1990), "Optimale Semijoins für verteilte Datenbanksysteme", IEEE -Transaktionen auf Software -Engineering, 16 (5): 558–560, doi:10.1109/32.52778
- Pagh, Anna; Pagh, Rasmus; Rao, S. Srinivasa (2005), "Ein optimaler Blütenfilterersatz", Verfahren des sechzehnten jährlichen ACM-SIAM-Symposiums über diskrete Algorithmen (PDF), S. 823–829
- Palmieri, Paolo; Calderoni, Luca; Maio, Dario (2014), "Räumliche Blütenfilter: Ermöglichung der Privatsphäre in landerschaftsbedingten Anwendungen", Proc. 10. Internationale Konferenz für Informationssicherheit und Kryptologie (Incrypt 2014), vol. 8957, Springer-Verlag, Vorlesungsnotizen in Informatik, S. 16–36, Citeseerx 10.1.1.471.4759, doi:10.1007/978-3-319-16745-9_2, ISBN 978-3-319-16744-2
- Porat, Ely (2009), "Ein optimaler Blütenfilterersatz basierend auf der Matrixlösung", in Frid, Anna E.; Morozov, Andrey; Rybalchenko, Andrey; Wagner, Klaus W. (Hrsg.), Informatik, Theorie und Anwendungen: Viertes internationales Informatik -Symposium in Russland, CSR 2009, Novosibirsk, Russland, 18. bis 23. August 2009, Proceedings, Proceedings, Vorlesungsnotizen in Informatik, Vol. 5675, Springer, S. 263–273, Arxiv:0804.1845, doi:10.1007/978-3-642-03351-3_25, ISBN 978-3-642-03350-6, S2CID 3205108
- Pournaras, e.; Warnier, M.; Brazier, F.M.T .. (2013), "ein generischer und adaptiver Aggregationsdienst für groß angelegte dezentrale Netzwerke", Komplexe Modellierung von adaptiven Systemen, 1:19: 19, doi:10.1186/2194-3206-1-19. Prototyp -Implementierung Erhältlich auf GitHub.
- Puck, F.; Sanders, P.; Singler, J. (2007), "Cache-, Hash- und Raumfahrtfilter", in Demetrescu, Camil (Hrsg.), Experimentelle Algorithmen, 6. International Workshop, WEA 2007 (PDF), Vorlesungsnotizen in Informatik, Vol. 4525, Springer-Verlag, Vorlesungsnotizen in Informatik 4525, S. 108–121, doi:10.1007/978-3-540-72845-0, ISBN 978-3-540-72844-3
- Rottenstreich, Ori; Kanizo, Yossi; Kesglassy, Isaac (2012), "Der Bloom-Filter der variablen Inkrementzählung", 31. jährliche IEEE International Conference on Computer Communications, 2012, Infocom 2012 (PDF), S. 1880–1888, Citeseerx 10.1.1.174.7165, doi:10.1109/infcom.2012.6195563, ISBN 978-1-4673-0773-4
- Sethumadhavan, Simha; Desikan, Rajagopalan; Burger, Doug; Moore, Charles R.; Keckler, Stephen W. (2003), "Skalierbare Hardwarespeicher -Disambiguation für hohe ILP -Prozessoren", 36. jährliches IEEE/ACM Internationales Symposium für Mikroarchitektur, 2003, Micro-36 (PDF), S. 399–410, Citeseerx 10.1.1.229.1254, doi:10.1109/micro.2003.1253244, ISBN 978-0-7695-2043-8, S2CID 195881068, archiviert von das Original (PDF) Am 2007-01-14
- Starobinski, David; Trachtenberg, Ari; Agarwal, Sachin (2003), "Effiziente PDA -Synchronisation" (PDF), IEEE -Transaktionen auf dem mobilen Computing, 2 (1): 40, Citeseerx 10.1.1.71.7833, doi:10.1109/tmc.2003.1195150
- Stern, Ulrich; Dill, David L. (1996), "Ein neues Schema für die erinnerneffiziente probabilistische Überprüfung", Verfahren mit formalen Beschreibungstechniken für verteilte Systeme und Kommunikationsprotokolle sowie Protokollspezifikation, Test und Überprüfung: IFIP TC6/WG6.1 Joint International Conference, Chapman & Hall, IFIP Conference Proceedings, S. 333–348, Citeseerx 10.1.1.47.4101
- Swamidass, S. Joshua; Baldi, Pierre (2007), "Mathematische Korrektur für Fingerabdruck -Ähnlichkeitsmaßnahmen zur Verbesserung des chemischen Abrufs", Journal of Chemical Information and Modeling, 47 (3): 952–964, doi:10.1021/ci600526a, PMID 17444629
- Wessels, Duane (Januar 2004), "10.7 Cache Digests", Tintenfisch: Die endgültige Anleitung (1. Aufl.), O'Reilly Media, p. 172, ISBN 978-0-596-00162-9,
Cache -Digests basieren auf einer von PEI CAO zuerst veröffentlichten Technik, die als Summary Cache bezeichnet wird. Die grundlegende Idee besteht darin, einen Bloom -Filter zu verwenden, um den Cache -Inhalt darzustellen.
- Tarkoma, Sasu; Rothenberg, Christian Esteve; Lagerspesen, Eemil (2012), "Theorie und Praxis von Blütenfiltern für verteilte Systeme", IEEE Kommunikationsumfragen und Tutorials, nein. 1. (PDF), vol. 14, S. 131–155
- Zhiwang, Cen; Jungang, Xu; Jian, Sun (2010), "Ein mehrschichtiger Blütenfilter für doppelte URL-Erkennung", Proc. 3. Internationale Konferenz über fortgeschrittene Computertheorie und Ingenieurwesen (ICACTE 2010), vol. 1, S. V1–586 - V1–591, doi:10.1109/ICACTE.2010.5578947, ISBN 978-1-4244-6539-2, S2CID 3108985
Externe Links
- "Verwenden von Bloom -Filtern" Detaillierte Blütefilter Erläuterung mit Verwendung Perl
- Warum Bloom -Filter so funktionieren, wie sie es tun (Michael Nielsen, 2012)
- Bloom-Filter-Ein Tutorial, Analyse und Umfrage (Blustein & El-Maazawi, 2002) an der Dalhousie University
- Tabelle der falsch positiven Raten für verschiedene Konfigurationen von einem Universität von Wisconsin-Madison Webseite
- "Optimalere Bloom -Filter", Ely Porat (Nov/2007) Google TechTalk Video an Youtube