Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 6755|Atbildi: 3

[Avots] .NET/C# izmanto Redis, lai ieviestu Bloom algoritmu, kas balstīts uz BitMap

[Kopēt saiti]
Publicēts 02.01.2023 17:37:01 | | | |
Prasības: Nesen es redzēju Redis Bloom algoritma video vietnē Bilibili, lai atrisinātu kešatmiņas iekļūšanas problēmu, vienkārši sakot, pirms piekļuves datu bāzei pievienojiet loģiska sprieduma slāni, lai noteiktu, vai dati pastāv, un, ja tā, piekļūstiet datu bāzei. Piemēram, ja vietne ir ziņu sistēma, rakstu URL tiek ģenerēti, izmantojot pašpalielinošus primārās atslēgas ID (URL formāts example:/news-1.html), tīmekļa vietnē var būt tikai desmitiem tūkstošu rakstu un kešatmiņas.

Sākotnēji:

Pieprasīt ziņu resursu -> Noteikt, vai kešatmiņa pastāv -> Klātbūtne -> Kešatmiņa atgriež datus.
Pieprasīt ziņu resursus -> Noteikt, vai kešatmiņa pastāv -> neeksistē -> Vaicāt no datu bāzes -> Prezentēt -> Kešatmiņu un atgriezt datus.
Pieprasīt ziņu resursu -> Noteikt, vai kešatmiņa pastāv -> nepastāv -> Vaicājums no datu bāzes -> Neeksistē -> Atgriež kļūdu 404.

Tieši tagad:

Pieprasīt ziņu resursu -> Blūma algoritmu -> Eksistence -> Sekojiet sākotnējai loģikai.
Pieprasīt ziņu resursu -> Blūma algoritms -> neeksistē -> tieši atgriež kļūdu 404.

BloomFilter

BloomFilter algoritms ir lielo datu plānošanas algoritms. Kopā ar lielu datu apjomu var precīzi noteikt, ka objekts nav kopā; Ir iespējams spriest par objektu komplektā un aizņemt maz vietas. TasTas nav piemērots situācijām, kurās nepieciešama augsta precizitāte un nulles kļūdas。 Efektīva telpas izmantošana tiek panākta, upurējot daļēju precizitāti.

Blūma algoritms ir metode, kuras pamatā irUpurējiet noteiktu precizitāti apmaiņā pret filtrēšanas algoritmu ar zemu atmiņas patēriņu, kas var realizēt liela apjoma datu filtrēšanu, deduplikāciju un citas darbības.

Bloom algoritms ir tikai abstrakts jēdziens, un to var īstenot daudzos veidos, un BitMap izmantošana Redis rakstā ir tikai vienkārša ieviešana.

Atsauce:Hipersaites pieteikšanās ir redzama.

Bitkartes ievads

BitMap ir bitkarte, kas faktiski ir baitu masīvs, kas attēlots binārā.Ir tikai divi skaitļi, 0 un 1, bitkarte ir izmantot katru bināro bitu, lai saglabātu vai atzīmētu elementam atbilstošo vērtību. To parasti izmanto, lai noteiktu, vai noteikti dati pastāv vai nav, jo tie tiek glabāti bitos, tāpēc pati Bitmap ievērojami ietaupīs krātuves vietu.

Kā parādīts zemāk redzamajā attēlā, virkne datorā tiek glabāta binārā formā.



BitMap datu tipi programmā Redis

Redis nodrošinātais datu tips ir BitMap, un katrs bits atbilst diviem stāvokļiem: 0 un 1. Lai gan iekšējā atmiņa joprojām ir virknes tipā, Redis sniedz dažus norādījumus par tiešu manipulāciju ar BitMap, ko var uzskatīt par bitu masīvu, un masīva apakšraksts ir nobīde.

Tās priekšrocības ir:Zemas atmiņas pieskaitāmās izmaksas un augsta efektivitāteUn darbība ir vienkārša.

Vietas taupīšana: Bits tiek izmantots, lai attēlotu elementa vērtību vai stāvokli, kur atslēga ir attiecīgā elementa vērtība. Patiesībā 8 biti var veidot baitu, tāpēc tas ietaupa vietu.
Augsta efektivitāte: setbit un getbit laika sarežģītība ir O(1), un arī citu bitu efektivitāte ir augsta.

Tālāk ir sniegts kopas kolekcijas un BitMap krātuves izmantošanas piemērs.

Datu tipsKatrs lietotājs aizņem vietuSaglabājamo lietotāju skaitsViss aizņem atmiņu
kopa32 biti ir 4 baiti (pieņemot, ka Userid izmanto veselus skaitļus, daudzas vietnes faktiski izmanto garos veselos skaitļus)50,000,00032 biti * 50 000 000 = 200 MB
Bitkartes1 bits100,000,0001 bits * 100 000 000 = 12,5 MB


Laiks nedaudz stiepjas

Viena dienaViens mēnesisViens gads
kopa200M6G72G
Bitkartes12,5 miljoni375 miljoni4.5G


Pēc aprēķina tika konstatēts, ka, palielinoties laikam, palielinājās reģistrējamo datu apjoms, un kontrasts kļuva acīmredzamāks, un BitMap aizņēma mazāk vietas nekā iestatīts.

Redis sniedz šādus norādījumus par BitMap darbību:

pavēlētIlustrētuPieejamās versijasLaika sarežģītība
Hipersaites pieteikšanās ir redzama.Iestatiet vai notīriet bitus norādītajā nobīdē atslēgas vērtībai, kas saglabāta atslēgā.>= 2.2.0O(1)
Hipersaites pieteikšanās ir redzama.Atslēgā saglabātajai virknes vērtībai iegūstiet bitus norādītajā nobīdē.>= 2.2.0O(1)
Hipersaites pieteikšanās ir redzama.Saskaita bitu skaitu noteiktā virknē, kas ir iestatīts uz 1.> = 2.6.0O(N)
Hipersaites pieteikšanās ir redzama.Atgriež binārā bita pozīciju bitkartē, kur pirmā vērtība ir bits.>= 2.8.7O(N)
Hipersaites pieteikšanās ir redzama.Bitu manipulācija ar vienu vai vairākiem virknes taustiņiem, kas satur bināros bitus.> = 2.6.0O(N)
Hipersaites pieteikšanās ir redzama.Komanda BITFIELD var darboties vairākos bitu diapazonos vienlaicīgi vienā zvanā.>= 3.2.0O(1)


Komandu dokumentācija:Hipersaites pieteikšanās ir redzama.

Tagad, kad jums ir īsa izpratne par algoritmu un Redis bitkartes funkcijām un sintaksi, izmantosim redis, lai veiktu vienkāršu darbību.

SETBIT sintakse:SETBIT atslēgas nobīdes vērtība

Iestatiet raksta ID:9, 10, 156 uz 1, un komanda ir šāda:

GETBIT sintakse: GETBIT taustiņu nobīde

Lai noteiktu, vai id: 10 vai 11 eksistē, komanda ir šāda:




.NET/C# manipulē ar Redis BitMap tipu

Mēs uzzinājām par vairākām BitMap komandām redis un to, kā tās programmiski darbināt. Izveidojiet jaunu .NET 3.1 konsoles projektu, atsaucieties uz StackExchange.Redis pakotni un izmantojiet šādu komandu:

Avota kods ir šāds:



Ir daudz citu bitkartes lietojumprogrammu Redis scenāriji:

  • To var izmantot kā vienkāršu Bloom filtru, lai noteiktu, vai lietotājs ir veicis noteiktas darbības.
  • Statistika par lietotāju ikdienas aktivitātēm, ikmēneša aktivitātēm un saglabāšanas līmeni
  • Realizēt lietotāju palaišanas skaita statistiku
  • Lietotāju klātbūtne tiešsaistē un personu statistika

(Beigas)




Iepriekšējo:Virtuālie aktieri: Dapr pret Orleānu
Nākamo:Alibaba Cloud SLB slodzes balansēšanas 503 kļūdu risinājums
 Saimnieks| Publicēts 02.01.2023 17:41:56 |
Publicēts 02.01.2023 20:42:47 |
Es esmu iemācījies, paldies, un ieguvis zināšanas
Publicēts 06.01.2023 20:34:22 |
Iemācieties mācīties
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com