Na função para gerar a tabela, faça com que ela armazene o resultado em um arquivo em disco:
/cache/groups/1.txt
/cache/groups/2.txt
Você não precisa necessariamente executar um trabalho em lote semanal para isso, ao chamar a função para obter os dados, verifique se o cache está desatualizado (ou inexistente). Em caso afirmativo, gere e armazene os resultados em cache. Caso contrário, apenas retorne o arquivo em cache.
function getGroupTable($groupId) {
if (cacheIsStale($groupId)) {
generateCache($groupId);
}
return file_get_contents($cacheFile);
}
O
cacheIsStale()
função poderia apenas olhar para os timestamps do arquivo
para testar o frescor.