Bloom-Filter

Ein Bloomfilter ist eine platzsparende, probabilistische Datenstruktur, mit der Sie prüfen können, ob ein Element zu einem Set gehört. Bei dieser Art von Struktur kann es falsch positive Ergebnisse geben. Der Filter kann beispielsweise angeben, dass sich ein Element im Set befindet, obwohl das nicht der Fall ist. Falsch negative Ergebnisse sind jedoch nicht möglich. Wenn Sie also ein Element zum Set hinzufügen, muss der Filter angeben, dass sich das Element im Set befindet.

Der Filter erreicht dies, indem er mehrere Hash-Funktionen verwendet, um ein Element mehreren Bits in einem Bit-Array mit fester Größe zuzuordnen. Um die Wahrscheinlichkeit falsch positiver Ergebnisse zu steuern, können Sie die Anzahl der Bits im Array und die Anzahl der verwendeten Hash-Funktionen anpassen.

Anwendungsfälle

In diesem Abschnitt werden die folgenden Anwendungsfälle für die Verwendung von Bloomfiltern beschrieben:

  • Werbeanzeigen und Ereignisse deduplizieren: Wenn Sie eine E-Commerce-Website, einen Streamingdienst, ein Werbenetzwerk oder eine Marketingplattform haben, können Sie mit Bloom filtern feststellen, ob ein Nutzer eine Werbeanzeige gesehen, eine Werbe-E-Mail oder -Benachrichtigung erhalten oder ein Produkt gekauft hat.

    Sie können einen Bloomfilter verwenden, um alle Produkte zu speichern, die ein Nutzer kauft.

    • Wenn ein Produkt nicht im Filter enthalten ist, zeigen Sie dem Nutzer die Anzeige und fügen Sie das Produkt dem Filter hinzu.
    • Wenn sich das Produkt im Filter befindet, hat der Nutzer die zugehörige Werbeanzeige wahrscheinlich gesehen und das Produkt gekauft. Suchen Sie daher eine andere Anzeige, die dem Nutzer präsentiert werden kann.
  • Betrug erkennen: Sie können Bloomfilter verwenden, um festzustellen, ob eine Kreditkarte als gestohlen gemeldet wurde. Verwenden Sie dazu einen Filter, der als gestohlen gemeldete Karten enthält. Wenn eine Karte verwendet wird, prüfen Sie, ob sie im Filter enthalten ist.

    • Wenn die Karte nicht im Filter enthalten ist, wurde sie nicht als gestohlen gemeldet.
    • Wenn die Karte im Filter enthalten ist, können Sie sie mit der Hauptdatenbank vergleichen oder den Kauf ablehnen.
  • Spam und schädliche Inhalte filtern: Sie können Bloomfilter verwenden, um Inhalte auf potenzielle Bedrohungen, schädliche Materialien und Spam zu prüfen. Erstellen Sie dazu einen Filter, der schädliche URLs, Spam-E-Mail-Adressen und Spam-Telefonnummern enthält. Wenn der Nutzer eine URL eingibt oder eine E-Mail oder SMS erhält, prüfen Sie, ob diese Informationen im Filter enthalten sind.

    • Wenn die URL, E-Mail oder SMS nicht im Filter enthalten ist, können Sie dem Nutzer den Zugriff auf die Website erlauben, die durch die URL dargestellt wird, oder die E-Mail oder SMS empfangen lassen.
    • Wenn die URL, E-Mail oder SMS im Filter enthalten ist, verweigern Sie dem Nutzer den Zugriff auf die zugehörige Website oder verhindern Sie, dass der Nutzer die E-Mail oder SMS erhält.
  • Doppelte Nutzernamen erkennen: Sie können Bloomfilter verwenden, um festzustellen, ob ein Nutzername neu ist oder bereits vorhanden ist. Verwenden Sie dazu einen Filter, um jeden Nutzernamen zu erfassen, der sich auf Ihrer E-Commerce-Website oder Ihrem Streamingdienst registriert. Wenn sich ein neuer Nutzer mit seinem Nutzernamen registrieren möchte, prüfen Sie, ob der Nutzername im Filter enthalten ist.

    • Wenn der Nutzername nicht im Filter enthalten ist, erstellen Sie das Konto und fügen Sie den Nutzernamen dem Filter hinzu.
    • Wenn der Nutzername im Filter enthalten ist, lehnen Sie ihn ab.

Weitere Informationen zu diesen Anwendungsfällen finden Sie unter Häufige Anwendungsfälle für Bloomfilter.

Verfügbarkeit

Wenn Sie eine Memorystore for Valkey-Instanz der Version 8.0 oder höher erstellen, ist die Version 1.0 des Bloom-Datentyps und der zugehörigen Befehle automatisch verfügbar. Dieser Datentyp ist API-kompatibel mit der Bloomfilter-Befehlssyntax der folgenden Valkey-Clientbibliotheken:

Bloomfiltertypen

Es gibt die folgenden Arten von Bloomfiltern:

  • Skalierung: Dieser Filtertyp hat keine feste Kapazität, sodass der Filter wachsen kann. Wenn der Filter seine Kapazität erreicht und Sie ein neues, eindeutiges Element hinzufügen, wird der Filter skaliert und ein neuer Unterfilter erstellt. Dieser Unterfilter hat eine größere Kapazität als der Filter.
  • Nicht skalierbar: Dieser Filtertyp hat eine feste Kapazität. Die Anzahl der Elemente, die Sie dem Filter hinzufügen können, ist also begrenzt. Wenn der Filter seine Kapazität erreicht und Sie versuchen, ein neues, eindeutiges Element hinzuzufügen, wird ein Fehler ausgegeben.

Weitere Informationen zu den Unterschieden zwischen diesen Arten von Bloomfiltern siehe Skalierbare und nicht skalierbare Bloomfilter.

Bloomfilter-Attribute

Ein Bloomfilter hat die folgenden Attribute:

  • Kapazität: Die Anzahl der Elemente, die ein Bloomfilter aufnehmen kann, bevor entweder der Filter skaliert wird (bei einem skalierbaren Filter) oder das Hinzufügen weiterer Elemente abgelehnt wird (bei einem nicht skalierbaren Filter).
  • Rate falsch positiver Ergebnisse: Die Rate, die die Wahrscheinlichkeit steuert, dass Vorgänge für Bloomfilter falsch positive Ergebnisse liefern. Ein Vorgang, mit dem Sie prüfen, ob sich ein Element im Filter befindet, gibt beispielsweise an, dass sich das Element im Filter befindet, obwohl das nicht der Fall ist.
  • Erweiterung: Dieses Attribut ist mit skalierbaren Bloomfiltern verknüpft. Es steuert die Zunahme der Gesamtkapazität, wenn der Filter skaliert wird, weil er seine Kapazität erreicht hat.
  • Skalierbar oder nicht skalierbar: Gibt an, ob ein Bloomfilter skalierbar oder nicht skalierbar ist.

Weitere Informationen zu den Attributen von Bloomfiltern finden Sie unter Bloom-Attribute.

Bloomfilter-Objekte

Ein Bloomfilter-Objekt kann maximal 128 MB Arbeitsspeicher belegen. Verwenden Sie den BF.INFO key SIZE Befehl, um zu prüfen, wie viel Arbeitsspeicher ein Bloomfilter belegt. Dabei ist key der Schlüsselname für den Filter und SIZE ist die Anzahl der vom Filter belegten Byte.

Bloom-Kategorien

Verwenden Sie die @bloom Kategorie, um den Zugriff auf Bloom-Befehle und Daten zu verwalten. Neben dieser Kategorie verwenden auch die folgenden Kategorien Bloom-Befehle: @read, @write und @fast.

In der folgenden Tabelle wird angegeben, ob Sie Bloom-Befehle den Kategorien @read, @write, @fast und @bloom zuordnen können.

Bloom-Befehl @bloom @read @write @fast
BF.ADD Ja N J J
BF.CARD J J N J
BF.EXISTS J J N J
BF.INFO J J N J
BF.INSERT J N J J
BF.MADD J N J J
BF.MEXISTS J J N J
BF.RESERVE J J N Ja

Bloom-Messwerte

Zur Überwachung der Nutzung des Bloom-Datentyps sind in Memorystore for Valkey die folgenden Cloud Monitoring-Messwerte verfügbar:

  • objects_count
  • used_memory

Weitere Informationen zu diesen Messwerten finden Sie unter Bloomfilter- und JSON-Messwerte.

Bloom-Befehle

In diesem Abschnitt werden die Bloom-Befehle aufgeführt und beschrieben, mit denen Sie Bloom-Vorgänge für den Bloom-Datentyp ausführen können.

Befehl Beschreibung
BF.ADD Fügt einem Bloomfilter ein einzelnes Element hinzu. Wenn der Filter nicht vorhanden ist, wird er mit diesem Befehl erstellt.
BF.CARD Gibt die Kardinalität eines Bloomfilters zurück.
BF.EXISTS Ermittelt, ob ein Bloomfilter das von Ihnen angegebene Element enthält.
BF.INFO Gibt Informationen zur Nutzung und zu den Attributen eines Bloomfilters zurück.
BF.INSERT Erstellt einen Bloomfilter mit null oder mehr Elementen oder fügt einem vorhandenen Filter Elemente hinzu.
BF.MADD Fügt einem Bloomfilter ein oder mehrere Elemente hinzu. Wenn der Filter nicht vorhanden ist, wird er mit diesem Befehl erstellt.
BF.MEXISTS Ermittelt, ob der Bloomfilter ein oder mehrere Elemente enthält.
BF.RESERVE Erstellt einen leeren Bloomfilter mit den von Ihnen angegebenen Attributen.

Bloomfilter prüfen

Sie können die folgenden Informationen zu Bloomfiltern prüfen:

  • Arbeitsspeichernutzung: Prüfen Sie, ob ein Filter das Limit für die Arbeitsspeichernutzung erreicht. Verwenden Sie den BF.INFO Befehl, um die Arbeitsspeichermenge zu prüfen, die ein Filter belegt.
  • Kapazität: Prüfen Sie, ob ein Filter skalierbar ist. Wenn das der Fall ist, skalieren Sie den Filter so, dass er seine Kapazität erreicht, und skalieren Sie ihn dann.

Weitere Informationen zum Prüfen der Arbeitsspeichernutzung und Kapazität von Bloom filtern finden Sie unter Große Bloomfilter verarbeiten.