Guardar ou não na sessão?

12 respostas
Luiz_Henrique_Coura

falae galera!!

estou com uma dúvida com relação a alguns SELECTS de HTML que devo montar em minha aplicação.

todos os SELECTS que monto em meu HTML tem conteúdo pesquisado no banco de dados.

minha preocupação está no número de pedidos que serão feitos ao BD para gerar esses conteúdos nos SELECTS.

supondo que eu tenha 6 SELECTS e 10 usuários conectado na minha aplicação. isso dá no total de 60 consultas. tudo isso só para montar os SELECTS. agora imagine isso para 100 usuários!!

isso causa um grande número de requisições ao BD causando um congestionamento enorme.

atualmente estou jogando os resultados na sessão do usuário. dessa forma eu diminuo o número de requisições ao BD, porém existem dados que tem a necessidade de serem atualizados e enquanto a sessão estiver aberta eu não faço a requisição ao BD, mantendo assim os dados desatualizados.

bem, não sei se fui claro… heheh

alguem teria alguma solução para esse problema?

12 Respostas

Rafael_Steil

Na sessao do usuario eh cruel hein?!.. Jogue no ServletContext ou em alguma estrutura static ( no flames, please ).

Rafael

rocha

Rafael vc tem algum exemplo disso? Pois essa é uma dúvida minha tb…

Rocha

Rafael_Steil

Simplesmente declare algo como static e jogue la… tipo

public class MeuBean {
    private String nome;
    private String valor;

    // gets + sets
}

public class ComboDoHtml {
    private static List itens = new ArrayList();

    public void add(MeuBean m) {
        itens.add(m);
    }

    public boolean isEmpty() {
        return itens.size() == 0;
    }

    // xxx
}

entao vc faz algo como

if (combo.isEmpty()) {
    // vai ao banco, pega os valores,
    // cria o bean e adiciona na classe
}

ai eh soh vc usar os valores que tem no arraylist. Como eh static, o resultado eh mantido em memoria, e todo mundo pode acessar.

Eh simples, nao tem misterio… nao precisa ser algo exatamente como o ( pobre ) exemplo, mas algo no estilo…

Rafael

Grinvon

que tal usar o recurso de properties do java para guardar algumas sql?

Rafael_Steil

No caso eles nao querem guardar a query em si, mas sim o resultado da execucao da mesma.

Rafael

rocha

Valeu… isso muito vai me ajudar… :lol:

C

Cria um listener que na inicialização do context faz as consultas e joga todos os resultados no context. Só que isso deve ser utilizado com dados que não são alterados, por exemplo sexo, estado civil, etc.

Rafael_Steil

Na verdade nao… sempre eh possivel atualzar os valores.

Mas esse lance de usar o load-on-startup eh ruim… o lazy loading funciona melhor.

Rafael

Luiz_Henrique_Coura

Como seria o Lazy Loading??

utilizando static ou ServletContext?

Como seria para jogar no ServletContext?

Rafael_Steil

lazy loading eh qdo, na hora que alguem solicita os dados e eles ainda nao existem, vc busca eles, ao ivnes de trazer tudo duma vez soh.

Como vc usa o servletContext? hhmm… http://www.google.com.br/search?q=java+servletcontext

Rafael

smota

Ha controversias :shock:

Em muitos casos load-on-startup é mais negocio … um em especial eh criar o contexto do Hibernate onde ele vai ler os milhares de hbms que criei, coitado do primeito usuario se for usar lazy loading.

Rafael_Steil

Sim, nesse caso sim. Eu me referia a “melhor” no caso dos selects dele mesmo :slight_smile:

Rafael

Criado 24 de agosto de 2004
Ultima resposta 26 de ago. de 2004
Respostas 12
Participantes 6