Meilleure réponse
Comme Scott McNulty a précédemment répondu à cette question, la mise en cache SQL est le stockage des ensembles de résultats générés à la suite dune requête sur un base de données et en utilisant la copie du résultat pour des résultats ultérieurs. Cela étant dit, il y a BEAUCOUP plus dans ce problème que la simple «mise en cache». Le vrai problème n’est pas la mise en cache, c’est l’invalidation qui est la partie la plus difficile. Le stockage d’informations n’est pas difficile, sachant quand elles ne sont pas valides.
Il existe également un deuxième problème plus subtil lié à la mise en cache, à savoir l’impact de la latence réseau de la mise en cache. La plupart des solutions de cache fonctionnent comme un serveur indépendant, tout comme le fait une base de données. Afin dinterroger le cache, un aller-retour à travers le réseau doit être effectué, encore une fois, comme dans une base de données. Si le cache na pas la réponse de manière fiable et répond plus rapidement que la base de données, il est alors très difficile daméliorer les performances avec le cache.
Pour mettre en cache SQL de manière optimale, vous avez besoin dune solution capable de résoudre plusieurs problèmes:
- Quel contenu doit être mis en cache?
- Sil y a un résultat mis en cache, doit-il être considéré comme non valide?
- Si le cache atteint le taux est trop faible, la logique du cache s’ajustera-t-elle automatiquement pour arrêter la mise en cache et arrêter les recherches pour éviter la pénalité?
La réalité est que pour prendre en compte la plupart des cas de coin, cela prend ensemble de logique pour assurer un scénario de performances optimales pour la mise en cache. Ce n’est pas aussi simple que d’implémenter un moteur de cache tel que Redis ou Hazelcast dans votre application . Au lieu de cela, vous avez besoin dun moteur de cache intelligent qui peut inspecter les données qui sont modifiées, invalider automatiquement les données et optimiser autrement les requêtes qui peuvent être faites à un moteur de cache externe par rapport à ce qui est fait sur la base de données.
Un de ces moteurs provient de Heimdall Data (avertissement, je suis le CTO de Heimdall Data). Le moteur Heimdall met automatiquement en cache le contenu dirigé de lapplication vers la base de données en tant que pilote JDBC ou en tant que proxy de niveau de protocole, invalide automatiquement le contenu et optimise également le contenu mis en cache. Cela permet aux développeurs de se concentrer sur les fonctionnalités, pas sur le cache, ce qui, dans certains cas, peut économiser 20 à 40\% du temps de développement et de débogage dune application.
Réponse
La mise en cache en général consiste à stocker les résultats dun processus gourmand en ressources afin que les ressources naient pas à être dépensées à nouveau.
En SQL; il est toujours spécifique à la technologie du fournisseur. MS-SQL, Oracle, MySQL et PostGres ont tous des choix différents pour ce quils mettent en cache. Les résultats, la requête, même le plan dexécution de la requête peuvent tous être stockés pour être utilisés par des tentatives ultérieures de traiter les mêmes informations.
Dans le cas où les données sous-jacentes sont modifiées, le système dispose généralement dun mécanisme pour indiquer que les informations mises en cache sont «sales» et ne sont plus pleinement utilisables; afin que la requête puisse être exécutée à nouveau par le système.
Vous voyez cela tout le temps. Combien de temps prend ma requête? Pourquoi est-ce toujours plus rapide si je lexécute une deuxième fois? Eh bien, cest pourquoi. Le système se souvient efficacement de ce que vous lui avez demandé auparavant et vous donne la réponse dont il se souvient à partir de ce moment.