Cache: guarda una copia cerca y úsala rápido
Imagina que cada vez vas a un almacén lejano por un libro que lees a menudo. Cada viaje lleva mucho. ¿Y si guardas una copia en tu escritorio? Desde entonces solo extiendes la mano. Guardar cerca, como copia, lo que usas a menudo es caching.
Un almacén lejano es lento de alcanzar
Antes aprendimos que una base de datos
salta directo a la respuesta con un índice.
Pero incluso tras hallarlo,
aún hay que traer el dato de algún lado.
¿Y si ese almacén queda lejos?
El viaje es largo, así que cada extracción
lleva un buen rato.
Y cuando necesitas lo mismo otra vez,
recorres ese largo camino una vez más.
Toca el dato para traerlo del almacén lejano. El camino es largo, así que el viaje lleva un rato.
Una sola extracción ya tomó un camino largo.
Una o dos veces se aguanta.
Pero, ¿y si necesitas el mismo dato
cientos de veces al día?
Recorrerías ese largo camino cientos de veces.
Solo pensarlo cansa.
Si es algo que miras a menudo,
¿de verdad hace falta ir lejos cada vez?
Guarda una copia cerca
El truco es sorprendentemente simple.
Para los datos que miras a menudo,
tráelos una vez del almacén lejano
y luego guarda una copia en un sitio cercano.
A este guardador cercano lo llamamos cache.
La próxima vez que quieras lo mismo
no hace falta ir al almacén lejano.
Lo sacas de la cache que tienes al lado,
rápido, por un camino corto.
Toca el dato para copiarlo en la cache cercana. La cache vacía se llena.
Ahora hay una copia en la cache cercana.
Ahora, cuando busques el mismo dato otra vez
puedes olvidar el almacén lejano.
Lo sacas de la cache por un camino corto.
Pero hay algo que cuidar.
Cuando lo que quieres está en la cache
y cuando no, el trabajo cambia.
Veamos los dos casos por separado.
Un acierto y un fallo
Al buscar hay dos ramas.
Si lo que quieres ya está en la cache
lo sacas directo por el camino corto.
A esto lo llamamos acierto. Es rápido.
Si lo que quieres no está en la cache
no te queda más que ir al almacén lejano.
A esto lo llamamos fallo. Es lento.
En un fallo, ya que estás,
dejas una copia en la cache.
Así la próxima vez es un acierto.
Toca una petición. Si está en la cache, acierto por camino corto; si no, fallo por camino largo que luego deja una copia en la cache.
Al principio falló y fue lento,
pero una vez dejada una copia
la misma petición acertó y se hizo rápida.
Cuanto más a menudo miras,
más aciertos se suman y el promedio se acelera.
Por eso una cache es fiable.
Pero hay un dolor de cabeza.
Si el original del almacén lejano cambia,
¿qué pasa con la copia de la cache?
Cuando la cache se queda vieja
Una cache es solo una copia.
Aunque el original del almacén lejano cambie,
la cache no lo sabe
y aún tiene la copia vieja que recibió antes.
Entonces el acierto es rápido, sí,
pero el valor que entrega puede ser viejo.
Decimos que la cache quedó obsoleta.
Rápido, pero con el riesgo de un valor viejo,
esa es la sombra del caching.
¿Cómo nos protegemos?
Toca el original para cambiar su valor. La cache aún tiene el viejo. Rellenar o descartar la cache la vuelve a igualar.
Cambiar el original descuadró la cache.
Hay dos caminos principales para protegerla.
Uno es, cuando el original cambia,
rellenar la cache con el valor nuevo.
El otro es ponerle un plazo a la copia
y descartarla cuando pasa cierto tiempo.
El sitio vaciado se rellena
con una copia fresca en el próximo fallo.
De cualquier modo es un equilibrio: menos valores viejos
mientras se mantienen vivos los aciertos rápidos.
Resumamos
Reunido en una línea, es esto.
Un almacén lejano es lento, el camino es largo.
Guarda cerca, como copia, lo de uso frecuente.
Eso es la cache.
Si lo que quieres está en la cache es un acierto rápido;
si no, es un fallo y vas al sitio lejano.
Tras un fallo dejas una copia, lista para la próxima.
Si el original cambia, la cache se queda vieja,
así que la rellenas o la descartas para evitarlo.
Guárdala cerca y úsala rápido, eso es caching.
Toca los puntos clave en orden para repasar. (lejos es lento -> una copia cerca -> acierto y fallo -> viejo cuando el original cambia)
Ahora sabes guardar una copia cerca
y reutilizar lo mismo rápido.
El agobio de ir lejos cada vez
se despejó con una sola copia.
Cuidar los valores viejos por la velocidad ganada,
este sentido del equilibrio es la fuerza de manejar datos.
Las caches se esconden por todo el computador.
La próxima, dónde más se usa esta sabiduría
de las copias, sigamos explorando juntos.