Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 6755|Risposta: 3

[Fonte] .NET/C# utilizza Redis per implementare l'algoritmo di Bloom basato su BitMap

[Copiato link]
Pubblicato su 02/01/2023 17:37:01 | | | |
Requisiti: Recentemente ho visto un video dell'algoritmo Redis Bloom su Bilibili per risolvere il problema della penetrazione della cache; in parole semplici, aggiungere uno strato di giudizio logico prima di accedere al database per determinare se i dati esistono e, in tal caso, accedere al database. Ad esempio, se un sito web è un sistema di notizie, gli URL degli articoli sono generati da ID chiave primarie auto-incrementanti (formato URL example:/news-1.html), il sito web potrebbe avere solo decine di migliaia di articoli e cache.

Originariamente:

Richiedi risorsa di notizie -> Determina se la cache esiste -> Presenza -> La cache restituisce dati.
Richiedi risorse di notizie -> Determina se la cache esiste -> non esiste -> Interroga dal database -> Presente -> Cache e restituisci dati.
Richiedi una risorsa di notizie -> Determina se la cache esiste -> non esiste -> Consulta dal database -> Non esiste -> Restituisce un errore 404.

Subito:

Richiedi risorsa di notizie -> algoritmo di Bloom -> Esistenza -> Segui la logica originale.
Richiedi notizie -> l'algoritmo di Bloom -> non esiste -> restituisce direttamente un errore 404.

BloomFilter

L'algoritmo BloomFilter è un algoritmo di pianificazione dei big data. In un insieme con una grande quantità di dati, si può determinare con precisione che un oggetto non fa parte dell'insieme; È possibile giudicare un oggetto in un insieme occupando poco spazio. essoNon è adatto a situazioni che richiedono alta precisione e zero errori。 L'uso efficiente dello spazio si ottiene sacrificando una precisione parziale.

L'algoritmo di Bloom è un metodo basato suSacrificare una certa accuratezza in cambio di un algoritmo di filtraggio con basso consumo di memoria, che può eseguire il filtraggio, la deduplicazione e altre operazioni di una grande quantità di dati.

L'algoritmo di Bloom è solo un concetto astratto e può essere implementato in molti modi, e l'uso di BitMap in Redis nell'articolo è solo un'implementazione semplice.

Riferimento:Il login del link ipertestuale è visibile.

Introduzione al BitMap

BitMap è una bitmap, che in realtà è un array di byte, rappresentato in binario.Ci sono solo due numeri, 0 e 1, la bitmap consiste nell'utilizzare ogni bit binario per memorizzare o segnare il valore corrispondente a un elemento. Di solito viene usato per determinare se un certo dato esiste o meno, poiché sono memorizzati in bit, quindi la Bitmap stessa farà risparmiare notevolmente spazio di archiviazione.

Come mostrato nella figura sottostante, la stringa è memorizzata in forma binaria nel computer.



Tipi di dati BitMap in Redis

Il tipo di dato fornito da Redis è BitMap, e ogni bit corrisponde a due stati: 0 e 1. Sebbene la memoria interna sia ancora nel tipo Stringa, Redis fornisce alcune istruzioni per manipolare direttamente BitMap, che può essere considerata come un bit array, e il sottopedice dell'array è lo offset.

I suoi vantaggi sono:Basso sovraccarico di memoria e alta efficienzaE l'operazione è semplice.

Risparmio di spazio: Un bit viene usato per rappresentare il valore o lo stato di un elemento, dove la chiave è il valore dell'elemento corrispondente. In effetti, 8 bit possono costituire un byte, quindi risparmia spazio.
Alta efficienza: La complessità temporale di setbit e getbit è O(1), e anche l'efficienza degli altri bit è elevata.

Ecco un esempio di utilizzo della raccolta set e dello storage BitMap:

Tipo di datiOgni userid occupa spazioIl numero di utenti da memorizzareTutti occupano la memoria
mettere32 bit corrispondono a 4 byte (assumendo che userid usi interi, molti siti web usano effettivamente interi lunghi)50,000,00032 bit * 50.000.000 = 200 MB
Bitmap1 bit100,000,0001 bit * 100.000.000 = 12,5 MB


Il tempo si sta allungando un po'

Un giornoUn meseUn anno
mettere200M6G72G
Bitmap12,5M375M4.5G


Dopo il calcolo, si scoprì che con l'aumentare del tempo, la quantità di dati da registrare aumentava, il contrasto diventava più evidente e BitMap occupava meno spazio rispetto al set.

Redis fornisce le seguenti istruzioni per l'uso di BitMap:

comandoillustrareVersioni disponibiliComplessità temporale
Il login del link ipertestuale è visibile.Imposta o cancella i bit sull'offset specificato per il valore della stringa memorizzato nella tonalità.>= 2.2.0O(1)
Il login del link ipertestuale è visibile.Per il valore della stringa memorizzato nella chiave, si ottengono i bit sullo offset specificato.>= 2.2.0O(1)
Il login del link ipertestuale è visibile.Conta il numero di bit in una data stringa che sono impostati a 1.>= 2.6.0O(N)
Il login del link ipertestuale è visibile.Restituisce la posizione del bit binario nella bitmap dove il primo valore è il bit.>= 2.8.7O(N)
Il login del link ipertestuale è visibile.Manipolazione dei bit su uno o più tasti di stringa che contengono bit binari.>= 2.6.0O(N)
Il login del link ipertestuale è visibile.Il comando BITFIELD può operare su più bitrange simultaneamente in una singola chiamata.>= 3.2.0O(1)


Documentazione del comando:Il login del link ipertestuale è visibile.

Ora che hai una breve comprensione dell'algoritmo, delle caratteristiche e della sintassi Bitmap di Redis, usiamo Redis per eseguire un'operazione semplice.

Sintassi SETBIT:Valore di offset chiave SETBIT

Imposta l'articolo id:9, 10, 156 a 1, e il comando è il seguente:

Sintassi GETBIT: Offset chiave GETBIT

Per determinare se esiste id: 10 o 11, il comando è il seguente:




.NET/C# manipola il tipo BitMap di Redis

Abbiamo imparato diversi comandi BitMap in redis e come usarli in modo programmativo. Crea un nuovo progetto console .NET 3.1, fai riferimento al pacchetto StackExchange.Redis e usa il seguente comando:

Il codice sorgente è il seguente:



Esistono molti altri scenari di applicazione bitmap per Redis, come segue:

  • Può essere usato come semplice filtro di Bloom per determinare se un utente ha eseguito determinate azioni.
  • Statistiche sull'attività giornaliera degli utenti, l'attività mensile e il tasso di fidelizzazione
  • Comprendi le statistiche del numero di lanci utente
  • Presenza online degli utenti e statistiche sulle persone

(Fine)




Precedente:Attori virtuali: Dapr vs Orleans
Prossimo:Risoluzione degli errori Alibaba Cloud SLB Load Balancing 503
 Padrone di casa| Pubblicato su 02/01/2023 17:41:56 |
Pubblicato su 02/01/2023 20:42:47 |
Ho imparato, grazie, e acquisito conoscenze
Pubblicato su 06/01/2023 20:34:22 |
Impara a imparare
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com