O banco de dados freqüentemente é culpado pela baixa performance
do sistema. Não ter que repetir queries ao banco já é um bom
caminho para melhorar o desempenho. Elas podem ser cacheadas
guardando páginas inteiras, ou se você assim quer gerar uma
página dinâmica, mas quer que somente a query seja guardada,
você pode guardar somente os resultados, seja qual for, o ADODB
permite que você faça facilmente! Antes, no entanto, de você
salvar em cache para melhorar a performance, é aconselhável que
você otimize sua query. Alguns índices simples podem fazer toda
a diferença.
Agora deixe-me mostrar como ADODB permite que você armazene
resultado de queries. Neste exemplo, baseado na query que nós
rodamos na última vez, ADODB armazena os resultados em um
arquivo em /var/tmp/ADODB_CACHE por 10 minutos após a
query ter sido feita pela 1° vez.
include "$adodb_path/db_values.inc.php";
include "$adodb_path/adodb.inc.php";
$db- = NewADOConnection("$database_type");
$db->Connect("$host", "$usuario", "$senha", "$banco");
$ADODB_CACHE_DIR = "/var/tmp/adodb_cache"; //diretório para armazenar arquivos de cache.
$sql = "SELECT sobrenome, idade FROM funcionarios";
$rs = $db->CacheExecute(600, $sql); //executa e guarda os resutlados por 600 segundos.
if (!$rs) {
print $rs->ErrorMsg(); //mostra mensagem de erro
} // fim do IF
else {
while (!$rs->EOF) {
print $rs->fields[0]." ".$rs->fields[1]."<br>";
//fields[0] é sobrenome e fields[1] é a idade
$rs->MoveNext(); //Mover para o próximo registro
} //fim do WHILE
} // fim do ELSE
A função
CacheExecute pega dois argumentos:
- o primeiro é o tempo de vida do cache (em segundos);
- o segundo é a declaração SQL.
O primeiro é opcional, se você não especificar ele assume o valor
padrão de 3600 segundos (1 hora). Os arquivos recebem o nome no
seguinte formato: ADODB_*.CACHE e você pode deletá-los com
segurança após ter rodado bem o sistema. Você deve adicionar no
cron ou no gerenciador de tarefas rotinas para apagar os
arquivos de cache expirados.
Note que o parâmetro booleano do PHP MAGIC_QUOTES_RUNTIME deve
ser desligado para o cache poder trabalhar. Você pode alterar
isso se necessário em tempo de execução adicionando
SET_MAGIC_QUOTES_RUNTIME(0) em seu código antes de chamar a
classe de banco de dados.
Você pode também limpar o cache a qualquer hora chamando a
função CACHE_FLUSH(). Também é recomendado que o parâmetro
booleano do PHP REGISTER_GLOBAL seja configurado para OFF por
motivos de segurança (padrão nas versões mais recentes do PHP).