Beste antwoord
Zoals Scott McNulty eerder op deze vraag antwoordde, is SQL-caching het opslaan van resultatensets die zijn gegenereerd als resultaat van een query tegen een database, en de kopie van het resultaat gebruiken voor latere resultaten. Dat gezegd hebbende, er is VEEL meer aan de hand dan alleen “caching”. Het echte probleem is niet caching, het is de invalidatie die het moeilijkste is. Het opslaan van informatie is niet moeilijk, maar weten wanneer deze ongeldig is, is dat wel.
Er is ook een tweede, subtieler probleem bij caching en dat is de netwerklatentie-impact van caching. De meeste cache-oplossingen werken als een onafhankelijke server, net als een database. Om de cache te kunnen opvragen, moet opnieuw een rondreis over het netwerk worden uitgevoerd, net als naar een database. Als de cache het antwoord niet betrouwbaar heeft EN sneller antwoordt dan de database, dan is het erg moeilijk om de prestaties met de cache daadwerkelijk te verbeteren.
Om SQL optimaal te cachen, heb je een oplossing nodig die kan oplossen verschillende problemen:
- Welke inhoud moet in de cache worden opgeslagen?
- Als er een resultaat in de cache is, moet dit dan als ongeldig worden beschouwd?
- Als de cache op tarief te laag is, past de cachelogica zich automatisch aan om caching te stoppen en te stoppen met opzoeken om de straf te vermijden?
De realiteit is dat om rekening te houden met de meeste hoekgevallen, het een zeer complexe set logica om een best-case prestatiescenario voor caching te verzekeren. Dit is niet zo eenvoudig als het implementeren van een cache-engine zoals Redis of Hazelcast in uw applicatie . In plaats daarvan heb je een intelligente cache-engine nodig die kan inspecteren welke gegevens worden gewijzigd, gegevens automatisch ongeldig maakt en anderszins de verzoeken optimaliseert die aan een externe cache-engine worden gedaan versus wat er tegen de database wordt gedaan.
Een van die motoren is van Heimdall Data (disclaimer, ik ben de CTO van Heimdall Data). De Heimdall-engine slaat automatisch inhoud op die van de toepassing naar de database wordt gestuurd als ofwel een JDBC-stuurprogramma, of als een proxy op protocolniveau, maakt inhoud automatisch ongeldig en optimaliseert ook welke inhoud ook in de cache wordt opgeslagen. Hierdoor kunnen ontwikkelaars zich concentreren op functies, niet op cache, wat in sommige gevallen 20-40\% aan ontwikkel- en foutopsporingstijd voor een applicatie kan besparen.
Antwoord
Caching in het algemeen is opslaan de resultaten van een proces dat resource-intensief is, zodat de resources niet opnieuw hoeven te worden uitgegeven.
In SQL; het is altijd specifiek voor de technologie van de leverancier. MS-SQL, Oracle, MySQL en PostGres hebben allemaal verschillende keuzes voor wat ze cachen. De resultaten, de query en zelfs het uitvoeringsplan voor de query kunnen allemaal worden opgeslagen voor gebruik door latere pogingen om dezelfde informatie te verwerken.
In het geval dat de onderliggende gegevens worden gewijzigd, heeft het systeem meestal een mechanisme om aan te geven dat de informatie in de cache “vuil” is en niet langer volledig bruikbaar; zodat de query opnieuw door het systeem kan worden uitgevoerd.
Dit zie je de hele tijd. Hoe lang duurt mijn vraag? Waarom is het altijd sneller als ik het een tweede keer gebruik? Nou, dit is waarom. Het systeem onthoudt effectief wat u het eerder hebt gevraagd en geeft u het antwoord dat het zich vanaf die tijd herinnert.