logo

Johdatus LSM-puuhun

B+ puut ja LSM-puut ovat kaksi perustietorakennetta, kun puhumme rakennuspalikoista Tietokannat. B+-puita käytetään, kun tarvitsemme vähemmän haku- ja lisäysaikaa, ja toisaalta LSM-puita käytetään, kun meillä on kirjoitusintensiivisiä tietojoukkoja ja lukumäärät eivät ole niin korkeat.

Tämä artikkeli opettaa aiheesta Log Strukturoitu yhdistämispuu aka LSM-puu . LSM-puut ovat monien erittäin skaalautuvien NoSQL-hajautetun avainarvotyyppisten tietokantojen, kuten Amazonin DynamoDB, Cassandra ja ScyllaDB, taustalla oleva tietorakenne.

LSM-puut

Yksinkertainen LSM Trees -versio sisältää kaksi puumaista tietorakennetta:



  • Muistettavissa ja pysyy täysin muistissa (oletetaan T0)
  • Levylle tallennetut SStablet (oletetaan T1)
Yksinkertainen LSM-puu

Yksinkertainen LSM-puu

Uudet tietueet lisätään muistiin tallennettavaan T0-komponenttiin. Jos lisäys saa T0-komponentin ylittämään tietyn kokokynnyksen, peräkkäinen merkintöjen segmentti poistetaan T0:sta ja yhdistetään levyllä olevaan T1:een.

LSM-työnkulku

LSM käyttää ensisijaisesti kolmea käsitettä luku- ja kirjoitustoimintojen optimointiin:

  • Lajiteltu merkkijonotaulukko (SST-taulukot) : Tiedot lajitellaan lajiteltuun järjestykseen siten, että aina kun dataa luetaan, sen aikamonimutkaisuus on O( Log(N) ) pahimmassa tapauksessa, missä N on tietokantataulukon merkintöjen määrä. Android-UML---Algoritmi-vuokaavio-esimerkki-(2).webp

    1. SSTable

  • Muistettava :
    • Muistissa oleva rakenne
    • Tallentaa tiedot lajiteltuna
    • Toimii takaisinkirjoitusvälimuistina
    • Kun se on saavuttanut tietyn koon, sen tiedot huuhdellaan SST-taulukkona tietokantaan
    • Kuten, määrä SSTable kasvaa levyllä, ja jos jokin avain ei ole tietueissa
      • Kun luemme tätä avainta, meidän on luettava kaikki SST-taulukot, mikä lisää lukuajan monimutkaisuutta.
      • Tämän ongelman ratkaisemiseksi kuvaan tulee Bloom-suodatin.
      • Bloom-suodatin on tilaa säästävä tietorakenne, joka voi kertoa meille, jos avain puuttuu tietueistamme 99,9 prosentin tarkkuudella.
      • Tämän suodattimen käyttämiseksi voimme lisätä merkintöjä siihen, kun ne kirjoitetaan, ja tarkistaa avaimen lukupyyntöjen alussa, jotta voimme palvella pyyntöjä tehokkaammin, kun ne tulevat ensimmäiseksi.
Muistettava esitys

Muistettava esitys

  • Tiivistys :
    • Koska tallennamme tietoja SSTable-muodossa levylle, oletetaan, että niitä on N SSTable ja jokaisen pöydän koko on M
    • Sitten pahimmassa tapauksessa Lukea aika monimutkaisuus on O( N* loki(M) )
    • Joten kun SST-taulukkojen määrä kasvaa Lue Aika monimutkaisuus myös lisääntyy.
    • Lisäksi, kun vain huuhtelemme tietokannan SST-taulukoita, sama avain on läsnä useissa SST-taulukoissa
    • Tässä tulee tiivistimen käyttö
    • Compactor toimii taustalla, yhdistää SST-taulukot ja poistaa useita rivejä samalla ja lisää uuden avaimen uusimmilla tiedoilla ja tallentaa ne uuteen yhdistettyyn/tiivistettyyn SST-taulukkoon.

Android-UML---Algoritmi-vuokaavio-esimerkki-(4).webp

3.1. SSTables huuhdeltu levylle

Android-UML---Algoritmi-vuokaavio-esimerkki-(5).webp

3.6. Tiivistetty 2 SST-pöytää 1 SST-pöytään

Johtopäätös:

  • Kirjoitukset tallennetaan muistipuuhun (Memtable). Myös mahdolliset tukitietorakenteet (bloom-suodattimet ja harvalukuindeksi) päivitetään tarvittaessa.
  • Kun tämä puu tulee liian suureksi, se huuhdellaan levylle avaimet lajiteltuina.
  • Kun lukema tulee, tarkistamme sen käyttämällä kukintasuodatinta. Jos Bloom-suodatin osoittaa, että arvoa ei ole, ilmoitamme asiakkaalle, että avainta ei löydy. Jos Bloom-suodatin tarkoittaa, että arvo on läsnä, aloitamme SSTable-tiedostojen iteroinnin uusimmasta vanhimpaan.
  • LSM-ajan monimutkaisuus
    • Lukuaika: O(log(N)) missä N on levyllä olevien tietueiden lukumäärä
    • Kirjoitusaika: O(1) kuten se kirjoittaa muistiin
    • Poista aika: O(log(N)) missä N on levyllä olevien tietueiden lukumäärä
  • LSM-puita voidaan muokata tehokkaammiksi tietorakenteiksi käyttämällä enemmän kuin kahta suodatinta. Jotkut niistä ovat bLSM, Diff-Index LSM.