Paras vastaus
Kuten Scott McNulty aiemmin vastasi tähän kysymykseen, SQL-välimuisti on tulosjoukkojen tallentaminen kyselyn tuloksena tietokannassa ja käyttämällä kopiota tuloksesta myöhempää tulosta varten. Tästä huolimatta tässä asiassa on paljon enemmän kuin vain ”välimuisti”. Todellinen ongelma ei ole välimuistin tallentaminen, vaan kumoaminen on kova osa. Tietojen tallentaminen ei ole vaikeaa, mutta tieto siitä, milloin se on virheellistä, on.
Välimuistiin liittyy myös toinen, hienovaraisempi ongelma, joka on välimuistin vaikutus verkon viiveeseen. Useimmat välimuistiratkaisut toimivat itsenäisenä palvelimena, aivan kuten tietokanta. Välimuistin kyselemiseksi on suoritettava edestakainen matka verkon yli, kuten tietokantaan. Jos välimuistilla ei ole vastausta luotettavasti JA vastaus on nopeampi kuin tietokanta, suorituskykyä välimuistilla on todella vaikea parantaa.
SQL-välimuistin optimoimiseksi tarvitset ratkaisun, joka pystyy ratkaisemaan useita asioita:
- Mikä sisältö on välimuistissa?
- Jos välimuistitulos on, pidetäänkö sitä virheellisenä?
- Jos välimuisti osui nopeus on liian alhainen, soveltuuko välimuistilogiikka automaattisesti välimuistin lopettamiseksi ja hakujen lopettamiseksi rangaistuksen välttämiseksi?
Todellisuus on, että useimpien kulmatapausten huomioon ottaminen vaatii hyvin monimutkaisen joukko logiikkaa varmistaakseen välimuistin parhaimman mahdollisen suorituskyvyn. Tämä ei ole niin yksinkertaista kuin välimuistimoottorin, kuten Redis tai Hazelcast , käyttöönotto sovelluksessasi . Sen sijaan tarvitset älykkään välimuistimoottorin, joka voi tarkistaa muutettavat tiedot, mitätöidä tiedot automaattisesti ja optimoida muuten ulkoiselle välimuistimoottorille mahdollisesti esitetyt pyynnöt verrattuna tietokantaan tehtyihin pyyntöihin.
Yksi tällainen moottori on Heimdall Data -yhtiöstä (vastuuvapauslauseke, olen Heimdall Datan CTO). Heimdall-moottori tallentaa välimuistiin automaattisesti sovelluksesta tietokantaan joko JDBC-ohjaimen tai protokollatason välityspalvelimen, mitätöi sisällön automaattisesti ja optimoi myös välimuistissa olevan sisällön. Tämä antaa kehittäjille mahdollisuuden keskittyä ominaisuuksiin, ei välimuistiin, mikä joissakin tapauksissa voi säästää 20–40\% sovelluksen kehitys- ja virheenkorjausajasta.
Vastaus
Välimuisti yleensä on tallennus resurssiintensiivisen prosessin tulokset, jotta resursseja ei tarvitse käyttää uudelleen.
SQL: ssä; se on aina ominaista toimittajan tekniikalle. MS-SQL: llä, Oracle: llä, MySQL: llä ja PostGresillä on kaikilla erilaisia vaihtoehtoja välimuistin tallentamiseen. Tulokset, kysely ja jopa kyselyn suoritussuunnitelma voidaan kaikki tallentaa käytettäväksi myöhemmillä yrityksillä käsitellä samoja tietoja.
Jos taustalla olevaa tietoa muutetaan, järjestelmässä on yleensä mekanismi osoittaa, että välimuistissa olevat tiedot ovat ”likaisia” eikä niitä voida enää täysin käyttää; joten järjestelmä voi suorittaa kyselyn uudelleen.
Näet tämän koko ajan. Kuinka kauan kyselyni kestää? Miksi se on aina nopeampi, jos suoritan sen toisen kerran? No, siksi. Järjestelmä muistaa tehokkaasti mitä pyysit aiemmin ja antaa sinulle vastauksen, jonka se muistaa tuohon aikaan.