En la función para generar la tabla, haga que almacene el resultado en un archivo en el disco:
/cache/groups/1.txt
/cache/groups/2.txt
No necesariamente tiene que ejecutar un trabajo por lotes semanal para ello, al llamar a la función para obtener los datos, verifique si el caché está desactualizado (o no existe). Si es así, genere y almacene en caché los resultados entonces. Si no, simplemente devuelva el archivo almacenado en caché.
function getGroupTable($groupId) {
if (cacheIsStale($groupId)) {
generateCache($groupId);
}
return file_get_contents($cacheFile);
}
El cacheIsStale()
la función podría simplemente mirar las marcas de tiempo del archivo
para probar la frescura.