Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 6755|Vastaus: 3

[Lähde] .NET/C# käyttää Redisiä Bloom-algoritmin toteuttamiseen BitMapin pohjalta

[Kopioi linkki]
Julkaistu 2.1.2023 17.37.01 | | | |
Vaatimukset: Äskettäin näin videon Redis Bloom -algoritmista Bilibilissä, jolla ratkaistaan välimuistin läpäisyn ongelma, yksinkertaisesti sanottuna, lisätään looginen harkinta ennen tietokantaan pääsyä selvittääksesi, onko data olemassa, ja jos on, niin tietokantaan pääsemiseksi. Esimerkiksi, jos verkkosivusto on uutisjärjestelmä, artikkeleiden URL-osoitteet generoidaan itsestään kasvavilla ensisijaisilla avaintunnisteilla (URL-muoto example:/news-1.html), sivustolla voi olla vain kymmeniä tuhansia artikkeleita ja välimuistija.

Alun perin:

Pyydä uutisresurssia -> Selvitä, onko välimuisti olemassa -> Läsnäolo -> Välimuisti palauttaa dataa.
Pyydä uutisresursseja -> Selvitä, onko välimuisti olemassa -> ei ole olemassa -> Kysely tietokannasta -> Esittele -> Välimuisti- ja palautustiedot.
Pyydä uutisresurssia -> Selvitä, onko välimuisti olemassa -> ei ole olemassa -> Kysely tietokannasta -> Ei ole olemassa -> Palauttaa 404-virheen.

Juuri nyt:

Pyydä uutismateriaalia -> Bloomin algoritmi -> Olemassaolo -> Seuraa alkuperäistä logiikkaa.
Pyydä uutislähde -> Bloomin algoritmi -> ei ole olemassa -> palauttaa suoraan 404-virheen.

BloomFilter

BloomFilter-algoritmi on big data -aikataulutusalgoritmi. Joukossa, jossa on suuri määrä dataa, voidaan tarkasti määrittää, että objekti ei ole joukossa; On mahdollista arvioida objektia joukossa ja se vie vain vähän tilaa. seSe ei sovellu tilanteisiin, joissa vaaditaan suurta tarkkuutta ja nolla virhettä。 Tilan tehokas käyttö saavutetaan uhraamalla osittainen tarkkuudesta.

Bloomin algoritmi on menetelmä, joka perustuuUhraa tietty tarkkuus suodatusalgoritmin hyväksi, jolla on pieni muistinkulutus, joka voi toteuttaa suuren datamäärän suodatus-, duplikointi- ja muut toiminnot.

Bloom-algoritmi on vain abstrakti käsite, joka voidaan toteuttaa monin tavoin, ja BitMapin käyttö Redisissä artikkelissa on yksinkertainen toteutus.

Viittaus:Hyperlinkin kirjautuminen on näkyvissä.

BitMap-käyttöönotto

BitMap on bittikartta, joka on itse asiassa tavutaulukko, esitettynä binäärissä.On vain kaksi numeroa, 0 ja 1, bittikartta käytetään jokaista binääribittiä tallentamaan tai merkitsemään alkiota vastaavan arvon. Sitä käytetään yleensä selvittämään, onko tietty data olemassa vai ei, koska se on tallennettu bitteihin, joten Bitmap itsessään säästää tallennustilaa huomattavasti.

Kuten alla olevassa kuvassa näkyy, merkkijono tallennetaan binäärimuodossa tietokoneeseen.



BitMap-tietotyypit Redisissä

Redisin tarjoama tietotyyppi on BitMap, ja jokainen bitti vastaa kahta tilaa: 0 ja 1. Vaikka sisäinen tallennus on edelleen merkkijonotyyppiä, Redis tarjoaa ohjeita BitMapin suoraan käsittelyyn, jota voidaan ajatella bittitaulukoksi, ja taulukon alaindeksi on offset.

Sen edut ovat:Pieni muistikuorma ja korkea hyötysuhdeJa operaatio on yksinkertainen.

Tilansäästö: Bittiä käytetään kuvaamaan alkion arvoa tai tilaa, missä avain on vastaavan alkion arvo. Itse asiassa 8 bittiä voi muodostaa tavun, joten se säästää tilaa.
Korkea hyötysuhde: Setbitin ja getbitin aikavaativuus on O(1), ja myös muiden bittien tehokkuus on korkea.

Tässä esimerkki joukkokokoelman ja BitMap-tallennuksen käytöstä:

tietotyyppiJokainen käyttäjätunnus vie tilaaKäyttäjien määrä, joka täytyy tallentaaKaikki vievät muistin
joukko32 bittiä on 4 tavua (olettaen, että käyttäjätunnus käyttää kokonaislukuja, monet verkkosivustot käyttävät itse asiassa pitkiä kokonaislukuja)50,000,00032 bittiä * 50 000 000 = 200 MB
Bittikartta1 bitti100,000,0001 bitti * 100 000 000 = 12,5 MB


Aika venyy vähän

Eräänä päivänäYksi kuukausiYksi vuosi
joukko200 M6G72G
Bittikartta12,5M375M4.5G


Laskennan jälkeen havaittiin, että ajan myötä tallennettavan datan määrä kasvoi, kontrasti tuli selvemmäksi, ja BitMap vei vähemmän tilaa kuin asetettu.

Redis antaa seuraavat ohjeet BitMapin käyttöön:

komentohavainnollistaaSaatavilla olevat versiotAikavaativuus
Hyperlinkin kirjautuminen on näkyvissä.Aseta tai tyhjennä bitit määritellyn siirtymän perusteella avaimessa tallennetun merkkijonon arvolle.>= 2.2.0O(1)
Hyperlinkin kirjautuminen on näkyvissä.Avaimeen tallennetun merkkijonon arvolle saadaan bitit määritetyllä siirtymällä.>= 2.2.0O(1)
Hyperlinkin kirjautuminen on näkyvissä.Laskee tietyn merkkijonon bittien määrän, jotka asetetaan arvoon 1.>= 2.6.0O(N)
Hyperlinkin kirjautuminen on näkyvissä.Palauttaa binääribitin sijainnin bittikartassa, jossa ensimmäinen arvo on bitti.>= 2.8.7O(N)
Hyperlinkin kirjautuminen on näkyvissä.Bittien käsittely yhdellä tai useammalla merkkijonon näppäimellä, jotka sisältävät binääribittejä.>= 2.6.0O(N)
Hyperlinkin kirjautuminen on näkyvissä.BITFIELD-komento voi toimia useilla bittialueilla samanaikaisesti yhdellä kutsulla.>= 3.2.0O(1)


Komentodokumentaatio:Hyperlinkin kirjautuminen on näkyvissä.

Nyt kun sinulla on lyhyt käsitys algoritmista sekä Bitmap-ominaisuuksista ja Redisin syntaksista, käytetään redis-toimintoa yksinkertaiseen operaatioon.

SETBIT-syntaksi:SETBIT-avaimen offset-arvo

Aseta artikkelin id:9, 10, 156 arvoon 1, ja komento on seuraava:

GETBIT-syntaksi: GETBIT-näppäinsiirtymä

Määrittääksemme, onko id: 10 vai 11 olemassa, komento on seuraava:




.NET/C# manipuloi Redisin BitMap-tyyppiä

Opimme useista BitMap-komennoista Redisissä ja miten niitä käytetään ohjelmallisesti. Luo uusi .NET 3.1 -konsoliprojekti, viittaa StackExchange.Redis -pakettiin ja käytä seuraavaa komentoa:

Lähdekoodi on seuraava:



Redisille on olemassa monia muita bittikarttasovellusskenaarioita, kuten seuraavat:

  • Sitä voidaan käyttää yksinkertaisena Bloom-suodattimena selvittämään, onko käyttäjä suorittanut tiettyjä toimintoja.
  • Tilastot käyttäjien päivittäisestä aktiivisuudesta, kuukausittaisesta aktiivisuustasosta ja pysyvyysasteesta
  • Ymmärrä käyttäjien lanseerausten tilastot
  • Käyttäjien verkkoläsnäolo ja henkilöstötilastot

(Loppu)




Edellinen:Virtuaalinäyttelijät: Dapr vs Orléans
Seuraava:Alibaba Cloud SLB Load Balancing 503 Error Resolution
 Vuokraisäntä| Julkaistu 2.1.2023 17.41.56 |
Julkaistu 2.1.2023 20.42.47 |
Olen oppinut, kiitos, ja saanut tietoa
Julkaistu 6.1.2023 20.34.22 |
Opettele oppimaan
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com