Bästa svaret
Som Scott McNulty tidigare svarade på den här frågan är SQL Caching lagring av resultatsatser som genereras som ett resultat av en fråga mot en databas och använda kopian av resultatet för senare resultat. Med detta sagt finns det mycket mer i denna fråga än bara ”cachning”. Det verkliga problemet är inte cachning, det är ogiltigförklaringen som är den svåraste delen. Att lagra information är inte svårt, att veta när den är ogiltig är.
Det finns också ett andra, mer subtilt problem med cachning, och det är nätverkets latenspåverkan av cachning. De flesta cachelösningar fungerar som en oberoende server, precis som en databas gör. För att fråga cachen måste en rundresa över nätverket utföras, liksom till en databas. Om cacheminnet inte har svaret tillförlitligt OCH svarar snabbare än databasen är det väldigt svårt att faktiskt förbättra prestandan med cacheminnet.
För att cacha SQL optimalt behöver du en lösning som kan lösa flera frågor:
- Vilket innehåll ska cachas?
- Om det finns ett cachat resultat, bör det anses ogiltigt?
- Om cacheminnet träffade är för lågt, kommer cachelogiken automatiskt att justeras för att stoppa cachning och sluta göra sökningar för att undvika straffet?
Verkligheten är att för att ta hänsyn till de flesta hörnfall, krävs det en mycket komplex uppsättning logik för att försäkra ett optimalt scenario för cachning. Det här är inte så enkelt som att implementera en cachemotor som Redis eller Hazelcast i din applikation . Istället behöver du en intelligent cachemotor som kan inspektera vilken data som ändras, automatiskt ogiltigförklara data och på annat sätt optimera de begäranden som kan göras till en extern cachemotor jämfört med vad som görs mot databasen.
En sådan motor är från Heimdall Data (ansvarsfriskrivning, jag är CTO för Heimdall Data). Heimdall-motorn cachar automatiskt innehåll som riktas från applikationen till databasen, antingen som en JDBC-drivrutin eller som en protokollnivåproxy, ogiltigförklarar innehållet automatiskt och optimerar också vilket innehåll som cachas. Detta gör det möjligt för utvecklare att fokusera på funktioner, inte cache, vilket i vissa fall kan spara 20–40\% av utveckling och felsökningstid för en applikation.
Svar
Caching lagras i allmänhet resultaten av en process som är resurskrävande så att resurserna inte behöver spenderas igen.
I SQL; det är alltid specifikt för leverantörstekniken. MS-SQL, Oracle, MySQL och PostGres har alla olika val för vad de cachar. Resultaten, frågan, till och med körplanen för frågan kan alla lagras för användning genom senare försök att bearbeta samma information.
Om den underliggande informationen ändras har systemet vanligtvis en mekanism för att indikera att den cachade informationen är ”smutsig” och inte längre är helt användbar; så att frågan kan köras igen av systemet.
Du ser detta hela tiden. Hur lång tid tar min fråga? Varför är det alltid snabbare om jag kör det en andra gång? Det här är därför. Systemet kommer effektivt ihåg vad du frågade om det tidigare och ger dig svaret det kommer ihåg från den tiden.