Otmizar action List
12/08/2013 19:25
1
Olá pessoal, fiquei com uma dúvida aqui... O método List do controller de um domain grails realiza duas operações: List e Count.

O primeiro, realiza a busca e retorna um número de elementos entre um min e max definido para realizar a paginação. O segundo, faz uma nova busca para somatizar o total de entradas para também ajudar na paginação.

Só existe esta forma de fazer isso? Pois, o propósito do Count ao meu ver é o fato do list retornar um número delimitado de registros. O GORM realmente executa dois acessos? Se sim, será que existe uma forma de melhor desempenho para retornar os valores? Talvez listar e separar os intervalos depois, etc..

[]'s
Tags: List, Count, Desempenho


0
Olá luciano, sem sombra de dúvidas é a melhor forma de você não sobrecarregar o seu servidor. Imagne uma entidade com 10.000 registros, carregar 10.000 objetos em memória vai exigir uma grande servidor, e isso para um cliente conectado imagine agora que você tem 1000 clientes conectado, será um enorme disperdicio de memoria para realizar uma simples busca.


1
Pergunta interessante.

Sim, há uma forma de otimizar isto mas é muito presa a contexto.
Em algumas situações você pode ter em memória o contador com o numero total de registros. Assim evitaria este count no banco. Mas sao raras estas situações. Um caso possivel é no list, mas você vai ter um trabalhinho a mais para manter atualizado em memória este valor.


0
Percebi, e me preocupei com isso hoje pois a aplicação que estou trabalhando vai ter um elevado número de registros. E além disso meus List's são personalizados, ex:

def listCanceladas(){
params.max = Math.min(params.max ? params.int('max') : 10, 100)
def listInstance = MeuDomainX.findAllByStatusAndUser("Cancelada",springSecurityService.currentUser, params)

def listInstanceTotal = countByStatusAndUser("Cancelada",springSecurityService.currentUser)

...
}


Ou seja, meu list na verdade é um findAll com duas condições, e tenho que novamente executar a query para contar os registros e gerar a paginação. São dois acessos a minha base de dados, executando buscas não "triviais" simplesmente para fazer um list.

Pode ser nóia minha, mas se acontecer da forma que estou pensando é uma ação a mais, que pode influenciar no desempenho. Quando o EhCache está ativo, ele faz o cache da query executada ou de toda a coleção de dados no Domain?

[]'s
13/08/2013 11:31



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto