Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 6755|Atsakyti: 3

[Šaltinis] .NET/C# naudoja Redis, kad įdiegtų Bloom algoritmą, pagrįstą BitMap

[Kopijuoti nuorodą]
Paskelbta 2023-01-02 17:37:01 | | | |
Reikalavimai: Neseniai pamačiau vaizdo įrašą apie Redis Bloom algoritmą Bilibili, kad išspręstų talpyklos įsiskverbimo problemą, paprasčiau tariant, prieš prisijungdami prie duomenų bazės pridėkite loginio sprendimo sluoksnį, kad nustatytumėte, ar duomenys egzistuoja, ir jei taip, pasiekite duomenų bazę. Pavyzdžiui, jei svetainė yra naujienų sistema, straipsnių URL generuojami savaime didėjančiais pirminio rakto ID (URL formatas example:/news-1.html), svetainėje gali būti tik dešimtys tūkstančių straipsnių ir talpyklų.

Pradžių:

Prašyti naujienų išteklių -> Nustatykite, ar talpykla egzistuoja -> Buvimas -> Talpykla pateikia duomenis.
Prašyti naujienų išteklių -> Nustatyti, ar talpykla egzistuoja -> nėra -> Užklausa iš duomenų bazės -> Pateikti -> Talpykla ir grąžinti duomenis.
Prašyti naujienų šaltinio -> Nustatyti, ar talpykla yra -> nėra -> Užklausa iš duomenų bazės -> Neegzistuoja -> Pateikia 404 klaidą.

Dabar:

Prašyti naujienų šaltinio -> Bloomo algoritmas -> Egzistencija -> Vadovaukitės originalia logika.
Prašyti naujienų šaltinio -> Bloomo algoritmas -> neegzistuoja -> tiesiogiai pateikia 404 klaidą.

BloomFilter

"BloomFilter" algoritmas yra didelių duomenų planavimo algoritmas. Rinkinyje, kuriame yra didelis duomenų kiekis, galima tiksliai nustatyti, kad objekto nėra rinkinyje; Galima spręsti apie objektą rinkinyje ir užimti mažai vietos. jisTai netinka situacijoms, kurioms reikalingas didelis tikslumas ir nulis klaidų。 Efektyvus erdvės panaudojimas pasiekiamas aukojant dalinį tikslumą.

Bloomo algoritmas yra metodas, pagrįstasPaaukokite tam tikrą tikslumą mainais į filtravimo algoritmą su mažu atminties suvartojimu, kuris gali realizuoti didelio duomenų kiekio filtravimą, dublikatų šalinimą ir kitas operacijas.

"Bloom" algoritmas yra tik abstrakti sąvoka ir gali būti įgyvendintas įvairiais būdais, o "BitMap" naudojimas "Redis" straipsnyje yra tik paprastas įgyvendinimas.

Nuoroda:Hipersaito prisijungimas matomas.

BitMap įvadas

BitMap yra bitmap, kuris iš tikrųjų yra baitų masyvas, pavaizduotas dvejetainiu formatu.Yra tik du skaičiai, 0 ir 1, bitmap yra naudoti kiekvieną dvejetainį bitą elementui atitinkančiai reikšmei saugoti arba pažymėti. Paprastai jis naudojamas norint nustatyti, ar tam tikri duomenys egzistuoja, ar ne, nes jie saugomi bitais, todėl pats bitmap labai sutaupys vietos saugykloje.

Kaip parodyta paveikslėlyje žemiau, eilutė kompiuteryje saugoma dvejetaine forma.



"BitMap" duomenų tipai "Redis"

"Redis" pateiktas duomenų tipas yra "BitMap", o kiekvienas bitas atitinka dvi būsenas: 0 ir 1. Nors vidinė atmintis vis dar yra eilutės tipo, Redis pateikia keletą instrukcijų, kaip tiesiogiai manipuliuoti BitMap, kuris gali būti laikomas bitų masyvu, o masyvo apatinis indeksas yra poslinkis.

Jo privalumai yra šie:Mažos atminties išlaidos ir didelis efektyvumasIr operacija paprasta.

Vietos taupymas: bitas naudojamas elemento reikšmei arba būsenai pavaizduoti, kur raktas yra atitinkamo elemento reikšmė. Tiesą sakant, 8 bitai gali sudaryti baitą, todėl taupo vietą.
Didelis efektyvumas: setbit ir getbit laiko sudėtingumas yra O(1), o kitų bitų efektyvumas taip pat yra didelis.

Štai rinkinio rinkinio ir BitMap saugyklos naudojimo pavyzdys:

Duomenų tipasKiekvienas naudotojas užima vietąVartotojų, kuriuos reikia saugoti, skaičiusViskas užima atmintį
rinkinys32 bitai yra 4 baitai (darant prielaidą, kad userid naudoja sveikuosius skaičius, daugelis svetainių iš tikrųjų naudoja ilgus sveikuosius skaičius)50,000,00032 bitai * 50 000 000 = 200 MB
Rastras1 bitas100,000,0001 bitas * 100 000 000 = 12,5 MB


Laikas šiek tiek tempiasi

Viena dienaVienas mėnuoVieneri metai
rinkinys200 mln.6G72G
Rastras12,5 mln.375 mln.4.5G


Atlikus skaičiavimus, buvo nustatyta, kad laikui bėgant, įrašomų duomenų kiekis didėjo, o kontrastas tapo akivaizdesnis, o BitMap užėmė mažiau vietos nei nustatyta.

"Redis" pateikia šias "BitMap" naudojimo instrukcijas:

komandaIliustruotiGalimos versijosLaiko sudėtingumas
Hipersaito prisijungimas matomas.Nustatykite arba išvalykite nurodyto poslinkio bitus rakte saugomai eilutės reikšmei.> = 2.2.0O(1)
Hipersaito prisijungimas matomas.Rakte saugomai eilutės reikšmei gaukite nurodyto poslinkio bitus.> = 2.2.0O(1)
Hipersaito prisijungimas matomas.Skaičiuoja nurodytos eilutės bitų, nustatytų kaip 1, skaičių.>= 2.6.0O(N)
Hipersaito prisijungimas matomas.Pateikia dvejetainio bito padėtį rastrinėje schemoje, kur pirmoji reikšmė yra bitas.> = 2.8.7O(N)
Hipersaito prisijungimas matomas.Manipuliavimas bitais ant vieno ar kelių eilučių klavišų, kuriuose yra dvejetainiai bitai.>= 2.6.0O(N)
Hipersaito prisijungimas matomas.Komanda BITFIELD vienu metu gali veikti keliuose bitų diapazonuose.>= 3.2.0O(1)


Komandos dokumentacija:Hipersaito prisijungimas matomas.

Dabar, kai trumpai suprantate algoritmą ir "Redis" bitmap funkcijas bei sintaksę, naudokime redis paprastai operacijai atlikti.

SETBIT sintaksė:SETBIT rakto poslinkio reikšmė

Nustatykite straipsnio id:9, 10, 156 į 1 ir komanda yra tokia:

GETBIT sintaksė: GETBIT klavišų poslinkis

Norėdami nustatyti, ar id: 10 ar 11 egzistuoja, komanda yra tokia:




.NET/C# manipuliuoja Redis BitMap tipu

Sužinojome apie keletą "BitMap" komandų redis ir kaip jas valdyti programiškai. Sukurkite naują .NET 3.1 konsolės projektą, nurodykite paketą StackExchange.Redis ir naudokite šią komandą:

Šaltinio kodas yra toks:



Yra daug kitų "Redis" rastrų taikymo scenarijų:

  • Jis gali būti naudojamas kaip paprastas "Bloom" filtras, siekiant nustatyti, ar vartotojas atliko tam tikrus veiksmus.
  • Vartotojo kasdienės veiklos, mėnesio veiklos ir išlaikymo rodiklio statistika
  • Realizuokite vartotojų paleidimų skaičiaus statistiką
  • Naudotojų buvimas internete ir žmonių statistika

(Pabaiga)




Ankstesnis:Virtualūs aktoriai: Dapr vs Orleans
Kitą:"Alibaba Cloud SLB Load Balancing 503" klaidų sprendimas
 Savininkas| Paskelbta 2023-01-02 17:41:56 |
Paskelbta 2023-01-02 20:42:47 |
Išmokau, ačiū, įgijau žinių
Paskelbta 2023-01-06 20:34:22 |
Išmokite mokytis
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com