Es fácil ajustar el almacenamiento en memoria caché de memcached opcional alrededor de las consultas de bases de datos existentes. Por ejemplo:Patrón de diseño para el almacenamiento en memoria caché de datos memcached
Viejo (DB-only):
function getX
x = get from db
return x
end
Nueva (DB con Memcache):
function getX
x = get from memcache
if found
return x
endif
x = get from db
set x in memcache
return x
end
La cosa es, sin embargo, eso no es siempre como uno quiere almacenar. Por ejemplo, tomar las dos consultas siguientes:
-- get all items (recordset)
SELECT * FROM items;
-- get one item (record)
SELECT * FROM items WHERE pkid = 42;
Si tuviera que utilizar lo anterior pseudo-código para manejar el almacenamiento en caché, estaría almacenar todos los campos de objeto 42 dos veces. Una vez en el gran conjunto de registros y una sola vez. Mientras que prefiero hacer algo como esto:
SELECT pkid FROM items;
y almacenar ese índice de PK en caché. Luego, guarde en caché cada registro individualmente.
Por lo tanto, en resumen, la estrategia de acceso a datos que funcionará mejor para la base de datos no encaja perfectamente con la estrategia de Memcache. Como quiero que la capa de Memcache sea opcional (es decir, si Memcache está inactivo, el sitio aún funciona), quiero tener lo mejor de ambos mundos, pero para hacerlo, estoy bastante seguro de que necesitaré mantener una muchas de las consultas en 2 formas diferentes (1. índice de búsqueda, luego registros, y 2. recuperar conjunto de registros en una consulta). Se vuelve más complicado con la paginación. Con el DB, haría consultas LIMIT/OFFSET SQL, pero con Memcache simplemente obtendría el índice de PK y luego obtendría por lotes el segmento relevante de la matriz.
No estoy seguro de cómo diseñarlo con cuidado, ¿alguien tiene alguna sugerencia?
Mejor aún, si se ha enfrentado a esto usted mismo. ¿Cómo lo manejas?
Gracias por su respuesta Cem. Suponiendo que solo estoy almacenando en caché lo que realmente necesito almacenar en caché. ¿Tendría alguna idea de cómo administrar las dos estrategias (DB y DB + Memcache) con la menor duplicación de código? –