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ä:
| tietotyyppi | Jokainen käyttäjätunnus vie tilaa | Käyttäjien määrä, joka täytyy tallentaa | Kaikki vievät muistin | | joukko | 32 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,000 | 32 bittiä * 50 000 000 = 200 MB | | Bittikartta | 1 bitti | 100,000,000 | 1 bitti * 100 000 000 = 12,5 MB |
Aika venyy vähän
| | Eräänä päivänä | Yksi kuukausi | Yksi vuosi | | joukko | 200 M | 6G | 72G | | Bittikartta | 12,5M | 375M | 4.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:
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)
|