Pergunta

Say tenho algumas "categorias" 10 que eu preciso de referência em um aplicativo web. Atualmente eu estou armazenando essas categorias no DB e estou recuperando-os (nome da categoria e id) durante pageload na minha BasePage, armazenando-os em uma tabela hash e, em seguida, usando a tabela hash para fazer referência as categorias. Percebi que a chamada DB está sendo feita durante cada pageload. Eu só preciso puxar essas categorias, uma vez que eles nunca mudam durante uma determinada sessão. Qual é a melhor maneira de fazer isso?

  1. Faça o que eu estou fazendo, mas armazená-lo como uma variável de aplicação?

  2. código rígido as categorias no código, e acabar com o banco de dados?

  3. Loja as categorias em uma variável de sessão? E chamar o DB somente se a sessão está vazio?

  4. Ou algo mais?

Só estou curioso para saber o que a melhor prática é para fazer essas coisas.

Foi útil?

Solução

Se as categorias são dependentes, então eu armazená-los na variável de sessão do usuário; caso contrário eu utilizar a funcionalidade ASP.NET Cache (ou cache distribuído preferido). Isso permite que você para evitar bater o banco de dados ao mesmo tempo ser capaz de controlar quanto tempo as categorias devem ser armazenados em cache para.

Outras dicas

Chamando o banco de dados nem sempre é tão caro quanto parece, um site típico faz dezenas de chamadas para o DB em cada pageload. Mas se ela se torna problemático em termos de desempenho, considere o uso de uma solução ORM. O excelente fonte aberta NHibernate vem à mente, que é o "de facto" padrão para bancos de dados de mapeamento para classes e objetos. Além do mapeamento, ele fornece automaticamente dois níveis de cache e pool de conexão. Sem muita dificuldade, o site supera qualquer outro por um deslizamento de terra.

A desvantagem de usar um ORM? Para muitas pessoas, é considerado uma curva de aprendizado bastante íngreme. Se você quiser ler para isso, certifique-se de pagar uma visita ao NHibernate Melhores Práticas . Uma leitura difícil no início, mas definitivamente vale a pena.

Se você combinar NHibernate com FluentNHibernate , torna-se uma brisa para uso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top