See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 6755|Vastuse: 3

[Allikas] .NET/C# kasutab Redist Bloomi algoritmi rakendamiseks, mis põhineb BitMapil

[Kopeeri link]
Postitatud 02.01.2023 17:37:01 | | | |
Nõuded: Hiljuti nägin Bilibilis Redis Bloomi algoritmi videot, et lahendada vahemälu läbimise probleem – lihtsalt öeldes lisada loogiline hinnang enne andmebaasi ligipääsu, et kindlaks teha, kas andmed eksisteerivad, ja kui jah, siis pääse andmebaasile ligi. Näiteks kui veebileht on uudistesüsteem, genereeritakse artiklite URL-id isekasvavate esmaste võtmete ID-dega (URL-i formaat example:/news-1.html), veebilehel võib olla vaid kümneid tuhandeid artikleid ja vahemälusid.

Algselt:

Küsi uudisressurssi -> Määra, kas vahemälu eksisteerib -> Olemasolu -> Vahemälu tagastab andmeid.
Küsi uudisteallikaid -> Määra, kas vahemälu eksisteerib -> ei eksisteeri -> Päring andmebaasist -> Esita -> Vahemälu ja tagasta andmed.
Taotle uudisressurssi -> Määra, kas vahemälu eksisteerib -> ei eksisteeri -> Päring andmebaasist -> Ei eksisteeri -> Tagastab 404 vea.

Kohe praegu:

Küsi uudiste allikat -> Bloomi algoritm -> Olemasolu -> Järgi algset loogikat.
Küsi uudisressurssi -> Bloomi algoritm -> ei eksisteeri -> tagastab otse 404 vea.

BloomFilter

BloomFilter algoritm on suurandmete ajastamise algoritm. Hulgas, kus on palju andmeid, saab täpselt kindlaks teha, et objekt ei kuulu hulka; On võimalik hinnata objekti komplektis ja võtta vähe ruumi. seeSee ei sobi olukordadesse, kus on vaja suurt täpsust ja null viga。 Ruumi tõhus kasutamine saavutatakse osalise täpsuse ohverdamisega.

Bloomi algoritm põhineb meetodilOhverdada teatud täpsus filtreerimisalgoritmi vastu, millel on madal mälutarbimine, mis suudab teostada suure hulga andmete filtreerimist, duplikeerimist ja muid toiminguid.

Bloomi algoritm on lihtsalt abstraktne kontseptsioon ja seda saab rakendada mitmel moel ning BitMapi kasutamine Redis artiklis on lihtsalt lihtne teostus.

Viide:Hüperlingi sisselogimine on nähtav.

BitMapi sissejuhatus

BitMap on bitikaart, mis on tegelikult baitmassiiv, esitatud binaarses vormis.On ainult kaks numbrit, 0 ja 1, bitikaart tähendab iga binaarbiti kasutamist elemendile vastava väärtuse salvestamiseks või märgistamiseks. Seda kasutatakse tavaliselt selleks, et määrata, kas teatud andmed eksisteerib või mitte, sest see on salvestatud bittides, seega säästab Bitmap ise oluliselt salvestusruumi.

Nagu alloleval joonisel näidatud, salvestatakse string arvutis binaarses vormis.



BitMap andmetüübid Redis

Redis'i poolt pakutav andmetüüp on BitMap ning iga bitt vastab kahele olekule: 0 ja 1. Kuigi sisemälu on endiselt string-tüüpi, pakub Redis mõningaid juhiseid BitMapi otseseks manipuleerimiseks, mida võib pidada bitimassiiviks ning massiivi indeksiks on nihe.

Selle eelised on:Madal mälukoormus ja kõrge efektiivsusJa operatsioon on lihtne.

Ruumisääst: Bitti kasutatakse elemendi väärtuse või oleku esindamiseks, kus võti on vastava elemendi väärtus. Tegelikult võib 8 bitti moodustada ühe baidi, seega on see ruumisäästlik.
Kõrge efektiivsus: Setbiti ja getbiti ajakeerukus on O(1) ning teiste bittide efektiivsus on samuti kõrge.

Siin on näide hulgakogumiku ja BitMap salvestuse kasutamisest:

AndmetüüpIga kasutajad võtab ruumiKasutajate arv, keda tuleb salvestadaKõik hõivavad mälu
Komplekt32 bitti on 4 baiti (eeldades, et kasutajaid kasutab täisarvusid, kasutavad paljud veebilehed tegelikult pikki täisarvusid)50,000,00032 bitti * 50 000 000 = 200 MB
Bitmap1 bitt100,000,0001 bit * 100 000 000 = 12,5 MB


Aeg venib natuke

Ühel päevalÜks kuuÜks aasta
Komplekt200M6G72G
Bitmap12,5M375M4.5G


Arvutuse järel selgus, et aja möödudes suurenes salvestatavate andmete hulk, kontrast muutus selgemaks ja BitMap võttis vähem ruumi kui seatud.

Redis annab BitMapi kasutamiseks järgmised juhised:

käskIllustreeridaSaadaval olevad versioonidAja keerukus
Hüperlingi sisselogimine on nähtav.Sea või tühjenda bitid määratud nihkel võtmes salvestatud stringiväärtuse jaoks.>= 2.2.0O(1)
Hüperlingi sisselogimine on nähtav.Võtmes salvestatud stringiväärtuse jaoks saame bitid määratud nihkel.>= 2.2.0O(1)
Hüperlingi sisselogimine on nähtav.Loendab bittide arvu antud stringis, mis on seatud väärtusele 1.>= 2.6.0O(N)
Hüperlingi sisselogimine on nähtav.Tagastab binaarse biti asukoha bitikaardis, kus esimene väärtus on bitt.>= 2.8.7O(N)
Hüperlingi sisselogimine on nähtav.Biti manipuleerimine ühel või mitmel stringiklahvil, mis hoiavad binaarbitte.>= 2.6.0O(N)
Hüperlingi sisselogimine on nähtav.BITFIELD-käsk võib töötada mitme bitivahemiku peal samaaegselt ühe kutsega.>= 3.2.0O(1)


Käsu dokumentatsioon:Hüperlingi sisselogimine on nähtav.

Nüüd, kui sul on lühike arusaam algoritmist ning Redis'i bitmap-omadustest ja süntaksist, kasutame redist lihtsaks operatsiooniks.

SETBIT süntaks:SETBIT võtme nihke väärtus

Sea artikli id:9, 10, 156 väärtuseks 1 ja käsk on järgmine:

GETBIT süntaks: GETBIT klahvinihe

Selleks, et määrata, kas id: 10 või 11 eksisteerib, on käsk järgmine:




.NET/C# manipuleerib Redis'i BitMap tüüpi

Õppisime mitmeid BitMap-käske redises ja kuidas neid programmiliselt kasutada. Loo uus .NET 3.1 konsooliprojekt, viita StackExchange.Redis paketile ja kasuta järgmist käsku:

Lähtekood on järgmine:



Redis'i jaoks on palju teisi bitikaardi rakenduse stsenaariume, nagu järgmised:

  • Seda saab kasutada lihtsa Bloom-filtrina, et määrata, kas kasutaja on sooritanud teatud toiminguid.
  • Kasutajate igapäevase aktiivsuse, kuuaktiivsuse ja säilitusmäära statistika
  • Vaata statistikat kasutajate käivitamiste arvu kohta
  • Kasutajate veebipõhine kohalolek ja inimeste statistika

(Lõpp)




Eelmine:Virtuaalnäitlejad: Dapr vs Orleans
Järgmine:Alibaba Cloud SLB koormuse tasakaalustamine 503 vealahendus
 Üürileandja| Postitatud 02.01.2023 17:41:56 |
Postitatud 02.01.2023 20:42:47 |
Olen õppinud, aitäh, ja omandanud teadmisi
Postitatud 06.01.2023 20:34:22 |
Õpi õppima
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com