Cel mai bun răspuns
După cum Scott McNulty a răspuns mai devreme la această întrebare, SQL Caching este stocarea seturilor de rezultate generate ca urmare a unei interogări împotriva unui baza de date și folosind copia rezultatului pentru rezultate ulterioare. Acestea fiind spuse, există mult mai mult în această problemă decât doar „stocarea în cache”. Problema reală nu este stocarea în cache, este invalidarea cea mai dificilă. Stocarea informațiilor nu este dificilă, știind când sunt nevalide este.
Există, de asemenea, o a doua problemă mai subtilă implicată în stocarea în cache și acesta este impactul latenței rețelei pe cache. Majoritatea soluțiilor cache funcționează ca un server independent, la fel ca o bază de date. Pentru a interoga memoria cache, trebuie efectuată o călătorie dus-întors prin rețea, din nou, ca la o bază de date. Dacă cache-ul nu are răspunsul în mod fiabil, ȘI răspunde mai repede decât baza de date, atunci este foarte dificil să îmbunătățiți performanța cu cache-ul.
Pentru a cache în mod optim SQL, aveți nevoie de o soluție care poate rezolva mai multe probleme:
- Ce conținut ar trebui stocat în cache?
- Dacă există un rezultat în cache, ar trebui să fie considerat nevalid?
- Dacă cache-ul a lovit rata este prea mică, logica cache-ului se va regla automat pentru a opri stocarea în cache și a nu mai efectua căutări pentru a evita penalizarea?
Realitatea este că, pentru a ține cont de majoritatea cazurilor din colț, este nevoie de un proces foarte complex set de logici pentru a asigura un scenariu de performanță în cel mai bun caz pentru cache. Acest lucru nu este la fel de simplu ca implementarea unui motor cache, cum ar fi Redis sau Hazelcast în aplicația dvs. . În schimb, aveți nevoie de un motor inteligent de cache care să poată inspecta ce date sunt modificate, să invalideze automat datele și, în caz contrar, să optimizeze cererile care pot fi adresate unui motor de cache extern față de ceea ce se face în baza de date.
Un astfel de motor provine de la Heimdall Data (responsabilitate, eu sunt directorul tehnic al Heimdall Data). Motorul Heimdall cache în mod automat conținutul direcționat de la aplicație la baza de date fie ca un driver JDBC, fie ca un proxy la nivel de protocol, invalidează automat conținutul și optimizează și ce conținut este stocat în cache. Acest lucru permite dezvoltatorilor să se concentreze pe caracteristici, nu pe cache, care, în unele cazuri, pot economisi 20-40\% din timpul de dezvoltare și depanare pentru o aplicație.
Răspuns
Caching-ul în general este stocat rezultatele unui proces care necesită resurse mari, astfel încât resursele nu vor mai fi cheltuite din nou.
În SQL; este întotdeauna specific tehnologiei furnizorului. MS-SQL, Oracle, MySQL și PostGres au toate opțiuni diferite pentru ceea ce cache. Rezultatele, interogarea, chiar și planul de execuție pentru interogare pot fi stocate pentru utilizare prin încercări ulterioare de a procesa aceleași informații.
În cazul în care datele subiacente sunt modificate, sistemul are de obicei un mecanism să indice că informațiile din cache sunt „murdare” și nu mai sunt pe deplin utilizabile; deci interogarea poate fi rulată din nou de către sistem.
Vedeți acest lucru tot timpul. Cât durează interogarea mea? De ce este întotdeauna mai rapid dacă îl rulez a doua oară? Ei bine, acesta este motivul. Sistemul își amintește efectiv ceea ce l-ai întrebat înainte și îți oferă răspunsul pe care și-l amintește de atunci.