«

»

Dec 04

Print this Post

Simples query cache

Problema:

Um aplicativo tem uma query onde os dados recuperados não mudam muito frequentemente, mas executa toda vez que um usuário acessa o aplicativo. Isso pode causar problemas de performance se a query fôr longa ou retornar uma grande quantidade de dados.

Solução:

ColdFusion oferece duas formas diferentes de cachear queries usando os atributos cahedWithincachedAfter da tag <cfquery>.

Explicação detalhada:

Há muitas vezes em que dados de uma query não mudam frequentemente e podem ser salvos em memória. Isso elimina uma viagem ao database e acessando dados da memória é muito mais rápido. Há duas formas de lidar com isso usando a tag <cfquery>.

A primeira maneira de cachear uma query é usando o atributo cacheAfter da tag <cfquery>. Esse atributo pega a data ou data e hora e a query será cacheada a qualquer ponto após aquela data e hora. Ela ficará cacheada até que o cache seja esgotado, o valor da data ou data e hora nocachedAfter mudem ou o servidor seja reinicializado. Essa estratégia funciona para dados que mudam diariamente. Um bom exemplo disso seria um relatório que contenha grandes quantidades de dados que sejam atualizados uma vez ao dia.

<cfset cachedAfterValue = CreateDateTime( 2009,11,11,6,0,0 ) />
<cfquery name="qGetAGinormousOfData" cachedAfter="#cachedAfterValue#" datasource="dsn" >
     SELECT *
     FROM tbl_GinormousAmountOfData
</cfquery>

O aplicativo teria que ter lógica adicionada para manuzear atualização de dados a cada dia. Nesta instância, a query será cacheada após as 6 da manhã em 11 de novembro de 2009

A segunda forma de cachear uma query é usando o atributo cachedWithin da tag <cfquery>. O atributo cachedWithin recebe um período de tempo (timespan) como valor, criado usando-se a funçào CreateTimeSpan. A query será cacheada por um período de tempo especificado pelo timespan. Ela continuará cacheada até o final do período de tempo, cache seja esgotado ou o server reinicializado. Isso funciona bem para queries que não mudem frequentemente. Um bom exemplo disso seria uma lista de estados.

<cfquery name="qGetStates" cachedWithin="#CreateTimeSpan(4,20,6,13 )#" datssource="dsn">
     SELECT *
     FROM tbl_States
     ORDER BY stateName
</cfquery>

A query acima ficará cacheada por 4 dias, 20 horas, 6 minutos e 13 segundos ! Uma vez que aquele período de tempo expire, o próximo usuário que executar a query, executará a atual query e ela será cacheada novamente.

ColdFusion torna cache de queries muito simples. Enquanto essas não são as únicas maneiras de cachear queries em memória, são certamente um bom lugar para começar. E, em alguns casos será tudo o que um aplicativo necessita.

by Kevin Schmidt
Versão em inglês: Adobe ColdFusion Cookbook

Permanent link to this article: https://ensina.me/coldfusion/simples-query-cache/

Leave a Reply