Estou fazendo uma aplicação web que está prevista para milhares de acessos! Estou na dúvida se incremento um contador no BD toda vez que fizerem um insert para ser visto depois em estatisticas
OU
se faço um select count(*) toda vez que as estatisticas forem acessadas.
Também pode ser possivel usar um resultset e ver o tamanho dele, mas não quero usar esse método ^^
Alguém tem uma opnião sobre isso, algum conselho ou alguma outra maneira de se fazer, por favor fale ^^
utilizando do hibernate, por exemplo, isso seria gerenciado pelo próprio framework, com um dos seus métodos, a saber: increment, sequence, hilo, seqhilo, uuid, guid, native, assigned, select ou foreign
…para mais informações sobre geração de ids no hibernate http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml
ou então caso vc deseje implementar, outra forma que utilizo é para cada solicitação de cadastro (mesmo que esse não gere um registro no BD) incremento um valor que fica armazenado no bd em um generator ou sequence e retorno para o usuário, daí evito que duas pessoas na rede recebem o mesmo numero…
se for possível aconselho-o a utilizar o framework hibernate na camada de
persistencia…
Pelo que eu entendi, não é essa a dúvida do colega. Ele quer saber se é melhor incrementar algum campo no banco toda vez que tiver um acesso ou fazer “select count(*) from acessos” sempre que quiser saber a quantidade de acessos.
Se você for precisar desse dado muitas vezes, é melhor tê-la guardada em algum campo e só consultar essa informação. Mas se for uma vez perdida, faz o count(*) mesmo.
As respostas não foram ruins não! Mas voce foi mais perto msm ^^
As estatisticas que falei serão consultadas bastante, então imagino que um select count seja muito custoso! ! ! Por isso perguntei.
Mas ainda assim não tenho certeza se a melhor solução seria incrementar valor em outra tabela (serão varios valores). Lembrando que o valor deve ser decrementado sempre que for dado um delete!!!
entendo que a opção pelo count(*) seja a mais indicada, pois se você terá milhares de acesso, incluindo e deletando registros e, para cada inclusão ou deleção terá de atualizar um campo contador de registros em outra tabela, isto tornará sua aplicação mais lenta.
Outro fator é que, entre a inclusão de um registro e o update do campo contador, pode haver alguma indisponibilidade da aplicação ou do banco e o update não ser realizado. Neste caso seu campo contador fica incorreto. É claro que a possibilidade de isso ocorrer é pequena, mas considerando que você terá grande quantidade de tráfego, as probabilidades aumentam proporcionalmente.
Na minha opinião a escolha pelo count(*) seria a mais indicada neste caso.
Não especifiquei, mas é provavel que o numero de acesso as estatisticas seja bem maior que o numero de inclusoes ao BD, que só pode ser feita por autorizados… Mas ja tirei a duvida… Vlw, pessoar!