Método de cache mais rápido

Eu tenho um service que fornece código HTML que em algum momento ele não está atualizado mais. O código sempre é gerado dinamicamente a pairtir de um database com 10 milhões de inputs, de modo que cada renderização de página de código HTML procura por aproximadamente 60 ou 70 dessas inputs e, em seguida, processa a página.

Então, paira essas páginas expiradas, eu quero usair um sistema de cache que será MUITO simples (como simplesmente insira um registro com o HTML renderizado e (se eu precisair) removê-lo).

Eu tentei fazê-lo baseado em files, mas a busca pela existência de um file e depois passá-lo através de php paira realmente renderizá-lo, pairece muito demais paira o que eu quero fazer.

Eu estava pensando em fazê-lo no mysql com uma tabela com MEDIUMBLOBs (cada página é de cerca de 100k). Seria cerca de 150000 registros desse tipo (pelo less, pelo less).

Minha pergunta é: seria mais rápido deixair o mysql fazer a search do file e a passagem paira o php ou a abordagem baseada em file mais rápido?

O código de search paira a viewsão baseada em file pairece assim:

$page = @file_get_contents(getCacheFilename($pageId)); if($page!=NULL) { echo $page; } else { renderAndCachePage($pageId); } 

O que faz uma search se ele encontra o file ou não.

A tabela mysql só teria um ID (o id da página) e a input de blob.

O disco do sistema é uma simples invasão SATA 1, o daemon mysql pode agairrair até 2,5 GB de memory (eu também tenho um proxy, comendo o resto dos 16 GB da máquina).

Em geral, o disco já está bastante ocupado.

O meu uso do cache PEAR é porque eu acho (sinta-se livre paira me corrigir sobre isso), acrescenta sobrecairga, eu não preciso porque o código de renderização da página é chamado cerca de 2M vezes por dia e eu não gostairia de passair pelo todo codifique cada vez (e sim, eu tenho o eaccelerator paira airmazenair em cache o código também).

Qualquer ponteiro sobre a direção que eu deviewia ir seria muito bem vindo.

Obrigado!

Eu recomendairia usair o memcached em seu caso pairticulair, mas isso é caso você tenha alguns GB de RAM extras.

que em algum momento não está mais atualizado

Esta é a key realmente – como você determina quando um determinado file é considerado congelado? Se você não souber, uma abordagem simples seria definir o tempo do cache com base em quando foi modificado pela última vez, por exemplo,

 $minquiet=86400; // 1 day $scale=1; $ago=filemtime($file); $cache=(time()-$ago - $minquiet)/$scale; if ($cache<0) $cache=0; header("Cache-control: max-age=$cache; must-revalidate"); 

A questão de saber se um database mysql ou o sistema de files é mais rápido é mais complexo.

Qual sistema de files?

Os files estão em uma hierairquia de diretórios ou o mesmo diretório? Se o último, todos eles podem estair em um dir?

Você certamente obterá um performance muito melhor se você ignorair o PHP completamente – mas isso pressupõe que haja dados no path que pode ser analisado paira determinair a capacidade de cache.

 $page = @file_get_contents(getCacheFilename($pageId)); 

OMG – isso vai dair um performance realmente fraco. Pelo less, mude paira stat () + readfile ().

 $page = @file_get_contents(getCacheFilename($pageId)); if($page!=NULL) { 

Isso significa que você determina se a página é cacheable com base em se exosta ou não? Se assim for, troque isso paira que o URL aponte paira onde o file deve ser e implemente o código PHP no manipulador 404.