Un filtro di Bloom è una struttura di dati probabilistica a basso consumo di spazio che puoi utilizzare per verificare se un elemento fa parte di un insieme. Con questo tipo di struttura, puoi avere falsi positivi. Ad esempio, il filtro può indicare che un elemento è nell'insieme, anche se non lo è. Tuttavia, non puoi avere falsi negativi. Pertanto, se aggiungi un elemento all'insieme, il filtro deve indicare che l'elemento è nell'insieme.
Il filtro raggiunge questo risultato utilizzando più funzioni hash per mappare un elemento a più bit in un array di bit di dimensioni fisse. Per controllare la probabilità di falsi positivi, puoi modificare il numero di bit nell'array e il numero di funzioni hash utilizzate.
Casi d'uso
Questa sezione descrive i seguenti casi d'uso per l'utilizzo dei filtri di Bloom:
De-duplicare annunci ed eventi: se hai un sito di e-commerce, un servizio di streaming, una rete pubblicitaria o una piattaforma di marketing, i filtri di Bloom possono aiutarti a determinare se un utente ha visto un annuncio, ha ricevuto un'email o una notifica promozionale o ha acquistato un prodotto.
Puoi utilizzare un filtro di Bloom per archiviare tutti i prodotti acquistati da un utente.
- Se un prodotto non è nel filtro, mostra l'annuncio all'utente e aggiungi il prodotto al filtro.
- Se il prodotto è nel filtro, l'utente probabilmente ha visto l'annuncio associato e ha acquistato il prodotto. Pertanto, trova un altro annuncio da mostrare all'utente.
Rilevare le frodi: puoi utilizzare i filtri di Bloom per rilevare se una carta di credito è contrassegnata come rubata. Per farlo, utilizza un filtro che contenga le carte segnalate come rubate. Quando viene utilizzata una carta, verifica se viene visualizzata nel filtro.
- Se la carta non è nel filtro, non è contrassegnata come rubata.
- Se la carta è nel filtro, puoi confrontarla con il database principale o rifiutare l'acquisto.
Filtrare spam e contenuti dannosi: puoi utilizzare i filtri di Bloom per controllare i contenuti alla ricerca di potenziali minacce, materiali dannosi e spam. Per farlo, crea un filtro che contenga URL dannosi, indirizzi email di spam e numeri di telefono di spam. Quando l'utente inserisce un URL o riceve un'email o un SMS, verifica se queste informazioni vengono visualizzate nel filtro.
- Se l'URL, l'email o il testo non sono nel filtro, consenti all'utente di accedere al sito rappresentato dall'URL o di ricevere l'email o il testo.
- Se l'URL, l'email o il testo sono nel filtro, nega all'utente l'accesso al sito associato o impedisci all'utente di ricevere l'email o il testo.
Rilevare nomi utente duplicati: puoi utilizzare i filtri di Bloom per determinare se un nome utente è nuovo o se esiste già. Per farlo, utilizza un filtro per monitorare ogni nome utente che si registra al tuo sito di e-commerce o servizio di streaming. Quando un nuovo utente tenta di registrarsi con il suo nome utente, verifica se il nome utente viene visualizzato nel filtro.
- Se il nome utente non è nel filtro, crea l'account e aggiungi il nome utente al filtro.
- Se il nome utente è nel filtro, rifiutalo.
Per saperne di più su questi casi d'uso, consulta Casi d'uso comuni per i filtri di Bloom.
Disponibilità
Se crei un'istanza di Memorystore per Valkey, versione 8.0 e successive, la versione 1.0 del tipo di dati Bloom e i comandi associati è disponibile automaticamente. Questo tipo di dati è compatibile con l'API con la sintassi dei comandi del filtro di Bloom delle seguenti librerie client di Valkey:
Tipi di filtri di Bloom
Puoi avere i seguenti tipi di filtri di Bloom:
- Scalabilità: questo tipo di filtro non ha una capacità fissa, quindi il filtro può crescere. Se il filtro raggiunge la sua capacità e aggiungi un nuovo elemento univoco al filtro, il filtro viene scalato orizzontalmente e viene creato un nuovo sottofiltro. Questo sottofiltro ha una capacità maggiore rispetto al filtro.
- Non scalabile: questo tipo di filtro ha una capacità fissa, quindi esiste un limite al numero di elementi che puoi aggiungere al filtro. Se il filtro raggiunge la sua capacità e tenti di aggiungere un nuovo elemento univoco al filtro, ricevi un errore.
Per saperne di più sulle differenze tra questi tipi di filtri di Bloom, consulta Filtri di Bloom scalabili e non scalabili.
Proprietà dei filtri di Bloom
Un filtro di Bloom ha le seguenti proprietà:
- Capacità: il numero di elementi che un filtro di Bloom può contenere prima che il filtro venga scalato orizzontalmente (per un filtro scalabile) o che rifiuti di aggiungere altri elementi (per un filtro non scalabile).
- Percentuale di falsi positivi: la percentuale che controlla la probabilità che le operazioni per i filtri di Bloom generino falsi positivi. Ad esempio, un'operazione che utilizzi per verificare se un elemento è nel filtro indica che l'elemento è nel filtro, anche se non lo è.
- Espansione: questa proprietà è associata ai filtri di Bloom scalabili. Controlla la crescita della capacità complessiva quando il filtro viene scalato orizzontalmente perché raggiunge la sua capacità.
- Scalabile o non scalabile: indica se un filtro di Bloom è scalabile o non scalabile filtro.
Per saperne di più sulle proprietà dei filtri di Bloom, consulta Proprietà di Bloom.
Oggetti filtro di Bloom
Un oggetto filtro di Bloom può utilizzare un massimo di 128 MB di memoria. Per verificare la quantità di memoria utilizzata da un filtro di Bloom, utilizza il BF.INFO key SIZE comando, dove key è il nome della chiave per il filtro e
SIZE è il numero di byte utilizzati dal filtro.
Categorie di Bloom
Per gestire l'accesso ai comandi e ai dati di Bloom, utilizza la @bloom
categoria. Oltre a questa categoria, le seguenti categorie utilizzano i comandi di Bloom: @read, @write e @fast.
La seguente tabella indica se puoi mappare i comandi di Bloom alle categorie @read, @write, @fast e @bloom.
| Comando di Bloom | @bloom |
@read |
@write |
@fast |
|---|---|---|---|---|
BF.ADD |
Y | N | Y | Y |
BF.CARD |
Y | Y | N | Y |
BF.EXISTS |
Y | Y | N | Y |
BF.INFO |
Y | Y | N | Y |
BF.INSERT |
Y | N | Y | Y |
BF.MADD |
Y | N | Y | Y |
BF.MEXISTS |
Y | Y | N | Y |
BF.RESERVE |
Y | Y | N | Y |
Comandi di Bloom
Questa sezione elenca e descrive i comandi di Bloom che puoi utilizzare per eseguire operazioni di Bloom sul tipo di dati Bloom.
| Comando | Descrizione |
|---|---|
BF.ADD |
Aggiungi un singolo elemento a un filtro di Bloom. Se il filtro non esiste, allora il comando lo crea. |
BF.CARD |
Restituisci la cardinalità di un filtro di Bloom. |
BF.EXISTS |
Determina se un filtro di Bloom contiene l'elemento specificato. |
BF.INFO |
Restituisci le informazioni sull'utilizzo e le proprietà di un filtro di Bloom. |
BF.INSERT |
Crea un filtro di Bloom con 0 o più elementi oppure aggiungi elementi a un filtro esistente |
BF.MADD |
Aggiungi uno o più elementi a un filtro di Bloom. Se il filtro non esiste, il comando lo crea. |
BF.MEXISTS |
Determina se il filtro di Bloom contiene uno o più elementi. |
BF.RESERVE |
Crea un filtro di Bloom vuoto con le proprietà specificate. |
Controllare i filtri di Bloom
Puoi controllare le seguenti informazioni sui filtri di Bloom:
- Memoria utilizzata: verifica se un filtro raggiunge il limite di utilizzo della memoria. Per verificare
la quantità di memoria utilizzata da un filtro, utilizza il
BF.INFOcomando. - Capacità: verifica se un filtro è scalabile. In caso affermativo, scala il filtro in modo che raggiunga la sua capacità, quindi esegui lo scale out.
Per saperne di più sul controllo della memoria utilizzata e della capacità dei filtri di Bloom, consulta Gestire i filtri di Bloom di grandi dimensioni.