Beste Antwort
Wie Scott McNulty zuvor auf diese Frage geantwortet hat, ist SQL-Caching das Speichern von Ergebnismengen, die als Ergebnis einer Abfrage gegen a generiert wurden Datenbank und Verwenden der Kopie des Ergebnisses für spätere Ergebnisse. Davon abgesehen gibt es bei diesem Problem viel mehr als nur „Caching“. Das eigentliche Problem ist nicht das Zwischenspeichern, sondern die Ungültigmachung, die den schwierigen Teil ausmacht. Das Speichern von Informationen ist nicht schwierig, wenn Sie wissen, wann sie ungültig sind.
Es gibt auch ein zweites, subtileres Problem beim Zwischenspeichern, nämlich die Auswirkungen des Zwischenspeicherns auf die Netzwerklatenz. Die meisten Cache-Lösungen arbeiten wie eine Datenbank als unabhängiger Server. Um den Cache abzufragen, muss erneut ein Roundtrip über das Netzwerk durchgeführt werden, wie bei einer Datenbank. Wenn der Cache die Antwort nicht zuverlässig hat UND schneller als die Datenbank antwortet, ist es sehr schwierig, die Leistung mit dem Cache tatsächlich zu verbessern.
Um SQL optimal zwischenzuspeichern, benötigen Sie eine Lösung, die gelöst werden kann Mehrere Probleme:
- Welcher Inhalt sollte zwischengespeichert werden?
- Wenn ein zwischengespeichertes Ergebnis vorliegt, sollte es als ungültig angesehen werden?
- Wenn der Cache getroffen wurde Die Rate ist zu niedrig. Wird die Cache-Logik automatisch angepasst, um das Caching zu beenden und die Suche zu beenden, um die Strafe zu vermeiden?
Die Realität ist, dass es für die meisten Eckfälle sehr komplex ist Satz von Logik, um ein Best-Case-Leistungsszenario für das Caching sicherzustellen. Dies ist nicht so einfach wie das Implementieren einer Cache-Engine wie Redis oder Hazelcast in Ihre Anwendung . Stattdessen benötigen Sie eine intelligente Cache-Engine, die überprüfen kann, welche Daten geändert werden, Daten automatisch ungültig macht und auf andere Weise die Anforderungen an eine externe Cache-Engine im Vergleich zu den Anforderungen an die Datenbank optimiert.
Eine solche Engine stammt von Heimdall Data (Haftungsausschluss, ich bin der CTO von Heimdall Data). Die Heimdall-Engine speichert automatisch Inhalte, die von der Anwendung an die Datenbank gesendet werden, entweder als JDBC-Treiber oder als Proxy auf Protokollebene zwischen, macht Inhalte automatisch ungültig und optimiert auch, welche Inhalte zwischengespeichert werden. Auf diese Weise können sich Entwickler auf Funktionen konzentrieren, nicht auf den Cache. In einigen Fällen können 20 bis 40\% der Entwicklungs- und Debugging-Zeit für eine Anwendung eingespart werden.
Antwort
Caching wird im Allgemeinen gespeichert die Ergebnisse eines Prozesses, der ressourcenintensiv ist, damit die Ressourcen nicht erneut ausgegeben werden müssen.
In SQL; Es ist immer spezifisch für die Herstellertechnologie. MS-SQL, Oracle, MySQL und PostGres haben unterschiedliche Auswahlmöglichkeiten für das, was sie zwischenspeichern. Die Ergebnisse, die Abfrage und sogar der Ausführungsplan für die Abfrage können alle zur Verwendung durch spätere Versuche gespeichert werden, dieselben Informationen zu verarbeiten.
Falls die zugrunde liegenden Daten geändert werden, verfügt das System normalerweise über einen Mechanismus um anzuzeigen, dass die zwischengespeicherten Informationen „schmutzig“ und nicht mehr vollständig verwendbar sind; Damit kann die Abfrage vom System erneut ausgeführt werden.
Sie sehen dies ständig. Wie lange dauert meine Anfrage? Warum ist es immer schneller, wenn ich es ein zweites Mal starte? Nun, deshalb. Das System merkt sich effektiv, was Sie zuvor gefragt haben, und gibt Ihnen die Antwort, an die es sich aus dieser Zeit erinnert.