domingo, 2 de dezembro de 2012

Cache de query

O cache de query é uma técnica de otimização formidável, que agiliza sobremaneira o acesso ao banco de dados, eliminando um dos principais gargalos de um sistema web. Define-se que a query será "cacheada" através do argumento cachedWithin, especificando-se também o tempo que o resultado permanecerá em memória. Isso é feito com a função CreateTimeSpan, que tem como argumentos o número de dias, horas, minutos e segundos. Veja o exemplo abaixo:
  
<cfquery datasource="bdProd" name="retornaCidades"
         cachedwithin="#CreateTimeSpan(0,1,0,0)#">

   select cod_cidade, dsc_cidade
   from esc.cidade
   where cod_uf = <cfqueryparam value="#arguments.uf#"

                   cfsqltype="CF_SQL_VARCHAR" maxlength="2">
   order by decode(dsc_cidade,'Rio De Janeiro','A',dsc_cidade)


</cfquery>

Na primeira vez que a query é executada, o servidor de aplicação vai ao banco de dados e aguarda a resposta, que vai levar alguma coisa perto de 30 milissegundos.

Mas, a partir da segunda vez que essa mesma query for requisitada ao servidor de aplicação, ele não vai mais incomodar o banco de dados, pois a query já se encontra "cacheada". O tempo necessário para retornar os dados será de ZERO milissegundos. Na verdade, por estar em memória real, o processo é tão rápido que não pode ser medido em milissegundos.

Analise as queries de seus sistemas e vejam quais são elegíveis para o uso desta técnica. A elegibilidade deve ser estudada caso a caso porque queries de pesquisa em tabelas que estão sendo constantemente atualizadas não poderão ser "cacheadas", sob pena de o retorno da pesquisa não representar a realidade - pode ficar algum dado de fora.

Cache de queries é um verdadeiro divisor de águas em sistemas web. Recomendo veementemente sua utilização.

Nenhum comentário:

Postar um comentário